{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6eaf827f-0136-4698-9d65-a6964605a23a",
   "metadata": {},
   "source": [
    "# The Memonomicon"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c4bd6424-7c16-44ac-9d1c-fe5b550bfd8d",
   "metadata": {},
   "source": [
    "This notebook provides a friendly introduction to memo. It is well-suited for people who already have some familiarity with the art of Bayesian modeling in cognitive science (e.g. with WebPPL). Some practice with array programming in Python (e.g. libraries like NumPy, PyTorch, or JAX) may also be helpful."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "affde3c6-bd36-4fd8-a7b8-0fa74db4bb71",
   "metadata": {},
   "outputs": [],
   "source": [
    "# !pip install memo-lang\n",
    "\n",
    "import jax\n",
    "import jax.numpy as np\n",
    "from memo import memo"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e4ce71cd-462a-4207-be45-c5b786dd6fa5",
   "metadata": {},
   "source": [
    "## Hello, memo!"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "59961bb9-2af8-407f-9717-d2124b2fecf4",
   "metadata": {},
   "source": [
    "At its heart, memo is a language for modeling the _choices_ made by _agents_. For example, suppose Alice chooses a card among three options, uniformly at random. The cards are numbered 1, 2, and 3. Let us start by computing the expected value of the number on the card.\n",
    "\n",
    "If we were expressing this situation in mathematical notation, we might say that Alice choses $c \\sim \\text{Uniform}(\\text{cards})$, or perhaps $p(c) \\propto 1$, and that we wish to compute $\\textbf{E}[c]$.\n",
    "\n",
    "To express this in memo, first we create a representation of the set of cards:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "b4ea7b01-6068-49aa-ab71-65504f81121d",
   "metadata": {},
   "outputs": [],
   "source": [
    "cards = np.array([1, 2, 3])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6b242ba6-ee7c-4d30-a207-2d7eaa8b6c53",
   "metadata": {},
   "source": [
    "Then, we create a memo that represents Alice choosing one of the cards with uniform probability."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "491a8f29-56e3-4ac6-b8c9-ef41ff4c3104",
   "metadata": {},
   "outputs": [],
   "source": [
    "@memo\n",
    "def alice_chooses_card():\n",
    "    cast: [alice]\n",
    "    alice: chooses(c in cards, wpp=1)\n",
    "    return E[alice.c]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a9ed2473-dda1-40e8-a235-2a412d6d4385",
   "metadata": {},
   "source": [
    "+ `@memo` is a tag that tells memo to interpret the function as memo code rather than Python code.\n",
    "+ `cast` tells memo the names of the agents being modeled (like a cast of characters in a play). In this case, there is only one (Alice).\n",
    "+ `chooses` says that Alice picks one card among `cards`, and calls that card `c`.\n",
    "+ `wpp` stands for **\"with probability proportional to\"**. Here, Alice chooses with probability proportional to 1, i.e. uniformly at random. In general, we can write arbitrary expressions after `wpp` to express probability distributions, which memo will automatically normalize.\n",
    "+ The `return` line says we should compute the expected value of Alice's card (`alice.c`).\n",
    "\n",
    "We can run this memo by calling it just like a Python function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "88933e1a-31c8-4ad0-bf72-c56b7d6953f4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Array(2., dtype=float32)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "alice_chooses_card()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "77c3bd31-5662-4467-9cee-6cfe53a9423c",
   "metadata": {},
   "source": [
    "The return value is a JAX array, which indeed contains 2, the average card value."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "abe16638-29f5-4d36-a928-d8b2f81f58bc",
   "metadata": {},
   "source": [
    "## Array programming in memo\n",
    "\n",
    "Another way to think about memo is as a language for _defining tables of values_. For example, suppose we wanted to create a table that shows the probability that Alice chooses each card. We could do this by introducing a new **axis** to our memo `alice_chooses_card[c: card]`), and `return`-ing the probability that Alice's chosen card is each value of `c` in the axis (by returning `E[alice.c == c]`).\n",
    "\n",
    "You can think of introducing an axis as saying: \"for every possible value of `c` in `cards`, run this model and give me the outputs in a table.\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "367caa10-0036-491f-9579-3e2990549613",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Array([0.33333334, 0.33333334, 0.33333334], dtype=float32)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@memo\n",
    "def alice_chooses_card[c: cards]():  # notice the new axis c\n",
    "    cast: [alice]\n",
    "    alice: chooses(c in cards, wpp=1)\n",
    "    return E[alice.c == c]  # probability that alice chooses c\n",
    "\n",
    "alice_chooses_card()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bbd16565-07b8-4bfd-96c7-0bf8df06ddf8",
   "metadata": {},
   "source": [
    "The result is what we expect: a uniform distribution, 1/3 probability each. Because the result is just a Python array, we can directly visualize this distribution using matplotlib."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "06e1174c-cfa4-40b0-9a74-9e1ef013b7dd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, \"Alice's choice\")"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkQAAAHHCAYAAABeLEexAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA5GUlEQVR4nO3de1xVVf7/8fcB5YAXLoaCGAleURNIUMKpQYsEu4yOZmQzqVTaqJT+mMmRpkSzvqiZkUU6U+OlstHJzKnGwRoU/VaoiZpa6qhpXgG1AMUEhf37o6+nOQLK/YD79Xw89mM8a6+9+Ow1W3y3zzpnWwzDMAQAAGBiTo4uAAAAwNEIRAAAwPQIRAAAwPQIRAAAwPQIRAAAwPQIRAAAwPQIRAAAwPQIRAAAwPQIRAAAwPQIRADqhMVi0fTp022vlyxZIovFosOHDzuspro0YMAA3XzzzXU65pVzBsBxCEQArun111+XxWJRRESEo0uxuRy4AKAuNHN0AQAav2XLlikgIEBbtmzRgQMH1KVLl2se8/DDD+vBBx+U1WptgAqbph9//FHNmvFrGGgMuEME4KoOHTqkL774QvPmzVPbtm21bNmyKh3n7OwsV1dX7uJchaurK4EIaCQIRACuatmyZfLy8tI999yj+++/v8qBqLI1RP/6178UFRWl1q1by93dXX379tW7775r12fz5s2KjY2Vh4eHWrRooaioKH3++efX/Jlbt25VTEyMvL295ebmpsDAQD3yyCNVqrcqdUnSN998o4EDB6pFixbq0KGD5syZU65PXl6eHn30Ufn4+MjV1VUhISFaunRpuX4VrSE6fvy4Hn30Ufn5+clqtSowMFDjx49XSUmJrU9+fr4mT54sf39/Wa1WdenSRbNnz1ZZWVmVzhVAefynCYCrWrZsmYYNGyYXFxeNHDlSCxYs0Jdffqm+fftWe6wlS5bokUceUa9evZSUlCRPT09t375d6enpeuihhyRJ69at0+DBgxUWFqbk5GQ5OTlp8eLFuuOOO/S///u/6tevX4Vj5+XladCgQWrbtq2mTp0qT09PHT58WKtWraqTuiTphx9+UGxsrIYNG6YHHnhAK1eu1B//+Ef17t1bgwcPlvTT22ADBgzQgQMHlJCQoMDAQL333nsaM2aM8vPzNWnSpErrOHHihPr166f8/HyNGzdOQUFBOn78uFauXKnz58/LxcVF58+fV1RUlI4fP67HH39cN910k7744gslJSXp5MmTSk1Nrcb/IwBsDACoxNatWw1JxqeffmoYhmGUlZUZN954ozFp0qRyfSUZycnJtteLFy82JBmHDh0yDMMw8vPzjdatWxsRERHGjz/+aHdsWVmZ7X+7du1qxMTE2NoMwzDOnz9vBAYGGnfddVeltX7wwQeGJOPLL7+s1jlWpS7DMIyoqChDkvHWW2/Z2oqLiw1fX19j+PDhtrbU1FRDkvHOO+/Y2kpKSozIyEijVatWRmFhoa39yjkbNWqU4eTkVOE5XK5l5syZRsuWLY3//Oc/dvunTp1qODs7G0eOHKnW+QP4CW+ZAajUsmXL5OPjo4EDB0r66S2euLg4LV++XKWlpdUa69NPP9XZs2c1depUubq62u27vM5ox44d2r9/vx566CGdOXNGp0+f1unTp1VUVKQ777xTGzdurPRtIU9PT0nSxx9/rIsXL9ZpXZe1atVKv/3tb22vXVxc1K9fP3377be2tjVr1sjX11cjR460tTVv3lxPPvmkzp07pw0bNlRYR1lZmVavXq377rtP4eHh5fZfruW9997T7bffLi8vL9v8nD59WtHR0SotLdXGjRurfO4AfsZbZgAqVFpaquXLl2vgwIE6dOiQrT0iIkIvvfSSMjIyNGjQoCqPd/DgQUm66nf57N+/X5I0evToSvsUFBTIy8urXHtUVJSGDx+uGTNm6OWXX9aAAQM0dOhQPfTQQ1f9pFtV6rrsxhtvLBeSvLy8tHPnTtvr7777Tl27dpWTk/1/b/bo0cO2vyKnTp1SYWHhNevYv3+/du7cqbZt21a4Py8v75rnAaA8AhGACq1bt04nT57U8uXLtXz58nL7ly1bVq1AVBWX7/68+OKLCg0NrbBPq1atKmy3WCxauXKlNm3apI8++khr167VI488opdeekmbNm2q9LjqcHZ2rrDdMIxaj11VZWVluuuuuzRlypQK93fr1q3BagGuJwQiABVatmyZ2rVrp7S0tHL7Vq1apQ8++EALFy6Um5tblcbr3LmzJGn37t2Vfo/R5T7u7u6Kjo6uUd233nqrbr31Vr3wwgt699139Zvf/EbLly/XY489VuO6qqNjx47auXOnysrK7O4S7d2717a/Im3btpW7u7t279591fE7d+6sc+fO1Xh+AFSMNUQAyvnx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egQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgegQiAABgeo0iEKWlpSkgIECurq6KiIjQli1bKu37xhtv6Pbbb5eXl5e8vLwUHR1drv+YMWNksVjsttjY2Po+DQAA0EQ5PBCtWLFCiYmJSk5O1rZt2xQSEqKYmBjl5eVV2D8zM1MjR47U+vXrlZWVJX9/fw0aNEjHjx+36xcbG6uTJ0/atr/97W8NcToAAKAJcnggmjdvnsaOHav4+Hj17NlTCxcuVIsWLbRo0aIK+y9btkwTJkxQaGiogoKC9Oabb6qsrEwZGRl2/axWq3x9fW2bl5dXQ5wOAABoghwaiEpKSpSdna3o6Ghbm5OTk6Kjo5WVlVWlMc6fP6+LFy+qTZs2du2ZmZlq166dunfvrvHjx+vMmTN1WjsAALh+NHPkDz99+rRKS0vl4+Nj1+7j46O9e/dWaYw//vGP8vPzswtVsbGxGjZsmAIDA3Xw4EE9/fTTGjx4sLKysuTs7FxujOLiYhUXF9teFxYW1vCMAABAU+TQQFRbs2bN0vLly5WZmSlXV1db+4MPPmj7c+/evRUcHKzOnTsrMzNTd955Z7lxUlJSNGPGjAapGQAAND4OfcvM29tbzs7Oys3NtWvPzc2Vr6/vVY+dO3euZs2apU8++UTBwcFX7dupUyd5e3vrwIEDFe5PSkpSQUGBbTt69Gj1TgQAADRpDg1ELi4uCgsLs1sQfXmBdGRkZKXHzZkzRzNnzlR6errCw8Ov+XOOHTumM2fOqH379hXut1qtcnd3t9sAAIB5OPxTZomJiXrjjTe0dOlS7dmzR+PHj1dRUZHi4+MlSaNGjVJSUpKt/+zZs/Xss89q0aJFCggIUE5OjnJycnTu3DlJ0rlz5/TUU09p06ZNOnz4sDIyMjRkyBB16dJFMTExDjlHAADQuDl8DVFcXJxOnTqladOmKScnR6GhoUpPT7cttD5y5IicnH7ObQsWLFBJSYnuv/9+u3GSk5M1ffp0OTs7a+fOnVq6dKny8/Pl5+enQYMGaebMmbJarQ16bgAAoGlweCCSpISEBCUkJFS4LzMz0+714cOHrzqWm5ub1q5dW0eVAQAAM3D4W2YAAACORiACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmV6NAtH79+rquAwAAwGFqFIhiY2PVuXNnPf/88zp69Ghd1wQAANCgahSIjh8/roSEBK1cuVKdOnVSTEyM/v73v6ukpKSu6wMAAKh3NQpE3t7e+n//7/9px44d2rx5s7p166YJEybIz89PTz75pL766qtqjZeWlqaAgAC5uroqIiJCW7ZsqbTvG2+8odtvv11eXl7y8vJSdHR0uf6GYWjatGlq37693NzcFB0drf3799fkVAEAgAnUelF1nz59lJSUpISEBJ07d06LFi1SWFiYbr/9dn399dfXPH7FihVKTExUcnKytm3bppCQEMXExCgvL6/C/pmZmRo5cqTWr1+vrKws+fv7a9CgQTp+/Litz5w5czR//nwtXLhQmzdvVsuWLRUTE6MLFy7U9nQBAMB1qMaB6OLFi1q5cqXuvvtudezYUWvXrtVrr72m3NxcHThwQB07dtSIESOuOc68efM0duxYxcfHq2fPnlq4cKFatGihRYsWVdh/2bJlmjBhgkJDQxUUFKQ333xTZWVlysjIkPTT3aHU1FQ988wzGjJkiIKDg/XWW2/pxIkTWr16dU1PFwAAXMdqFIieeOIJtW/fXo8//ri6deum7du3KysrS4899phatmypgIAAzZ07V3v37r3qOCUlJcrOzlZ0dPTPBTk5KTo6WllZWVWq5fz587p48aLatGkjSTp06JBycnLsxvTw8FBERESVxwQAAObSrCYHffPNN3r11Vc1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RyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACm1ygCUVpamgICAuTq6qqIiAht2bLlqv3fe+89BQUFydXVVb1799aaNWvs9o8ZM0YWi8Vui42Nrc9TAAAATZjDA9GKFSuUmJio5ORkbdu2TSEhIYqJiVFeXl6F/b/44guNHDlSjz76qLZv366hQ4dq6NCh2r17t12/2NhYnTx50rb97W9/a4jTAQAATZDDA9G8efM0duxYxcfHq2fPnlq4cKFatGihRYsWVdj/lVdeUWxsrJ566in16NFDM2fOVJ8+ffTaa6/Z9bNarfL19bVtXl5eDXE6AACgCXJoICopKVF2draio6NtbU5OToqOjlZWVlaFx2RlZdn1l6SYmJhy/TMzM9WuXTt1795d48eP15kzZyqto7i4WIWFhXYbAAAwD4cGotOnT6u0tFQ+Pj527T4+PsrJyanwmJycnGv2j42N1VtvvaWMjAzNnj1bGzZs0ODBg1VaWlrhmCkpKfLw8LBt/v7+tTwzAADQlDRzdAH14cEHH7T9uXfv3goODlbnzp2VmZmpO++8s1z/pKQkJSYm2l4XFhYSigAAMBGH3iHy9vaWs7OzcnNz7dpzc3Pl6+tb4TG+vr7V6i9JnTp1kre3tw4cOFDhfqvVKnd3d7sNAACYh0MDkYuLi8LCwpSRkWFrKysrU0ZGhiIjIys8JjIy0q6/JH366aeV9pekY8eO6cyZM2rfvn3dFA4AAK4rDv+UWWJiot544w0tXbpUe/bs0fjx41VUVKT4+HhJ0qhRo5SUlGTrP2nSJKWnp+ull17S3r17NX36dG3dulUJCQmSpHPnzumpp57Spk2bdPjwYWVkZGjIkCHq0qWLYmJiHHKOAACgcXP4GqK4uDidOnVK06ZNU05OjkJDQ5Wenm5bOH3kyBE5Of2c2/r37693331XzzzzjJ5++ml17dpVq1ev1s033yxJcnZ21s6dO7V06VLl5+fLz89PgwYN0syZM2W1Wh1yjgAAoHFzeCCSpISEBNsdnitlZmaWaxsxYoRGjBhRYX83NzetXbu2LssDAADXOYe/ZQYAAOBoBCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6BCIAAGB6jSIQpaWlKSAgQK6uroqIiNCWLVuu2v+9995TUFCQXF1d1bt3b61Zs8Zuv2EYmjZtmtq3by83NzdFR0dr//799XkKAACgCXN4IFqxYoUSExOVnJysbdu2KSQkRDExMcrLy6uw/xdffKGRI0fq0Ucf1fbt2zV06FANHTpUu3fvtvWZM2eO5s+fr4ULF2rz5s1q2bKlYmJidOHChYY6LQAA0IQ4PBDNmzdPY8eOVXx8vHr27KmFCxeqRYsWWrRoUYX9X3nlFcXGxuqpp55Sjx49NHPmTPXp00evvfaapJ/uDqWmpuqZZ57RkCFDFBwcrLfeeksnTpzQ6tWrG/DMAABAU+HQQFRSUqLs7GxFR0fb2pycnBQdHa2srKwKj8nKyrLrL0kxMTG2/ocOHVJOTo5dHw8PD0VERFQ6JgAAMLdmjvzhp0+fVmlpqXx8fOzafXx8tHfv3gqPycnJqbB/Tk6Obf/ltsr6XKm4uFjFxcW21wUFBZKkwsLCapxN1ZUVn6+XcdE01Nd1VR1cg+bGNQhHq69r8PK4hmFU+1iHBqLGIiUlRTNmzCjX7u/v74BqcL3zSHV0BTA7rkE4Wn1fg2fPnpWHh0e1jnFoIPL29pazs7Nyc3Pt2nNzc+Xr61vhMb6+vlftf/l/c3Nz1b59e7s+oaGhFY6ZlJSkxMRE2+uysjJ9//33uuGGG2SxWGzthYWF8vf319GjR+Xu7l71E4UNc1h7zGHtMH+1xxzWDvNXe5XNoWEYOnv2rPz8/Ko9pkMDkYuLi8LCwpSRkaGhQ4dK+imMZGRkKCEhocJjIiMjlZGRocmTJ9vaPv30U0VGRkqSAgMD5evrq4yMDFsAKiws1ObNmzV+/PgKx7RarbJarXZtnp6eldbt7u7ORVxLzGHtMYe1w/zVHnNYO8xf7VU0h9W9M3SZw98yS0xM1OjRoxUeHq5+/fopNTVVRUVFio+PlySNGjVKHTp0UEpKiiRp0qRJioqK0ksvvaR77rlHy5cv19atW/WXv/xFkmSxWDR58mQ9//zz6tq1qwIDA/Xss8/Kz8/PFroAAAD+m8MDUVxcnE6dOqVp06YpJydHoaGhSk9Pty2KPnLkiJycfv4wXP/+/fXuu+/qmWee0dNPP62uXbtq9erVuvnmm219pkyZoqKiIo0bN075+fm67bbblJ6eLldX1wY/PwAA0Pg5PBBJUkJCQqVvkWVmZpZrGzFihEaMGFHpeBaLRc8995yee+65uipR0k9vrSUnJ5d7ew1VxxzWHnNYO8xf7TGHtcP81V59zKHFqMln0wAAAK4jDv+magAAAEcjEAEAANMjEAEAANMjEAEAANMjEF0hLS1NAQEBcnV1VUREhLZs2VJp3yVLlshisdhtZv9o/8aNG3XffffJz89PFotFq1evvuYxmZmZ6tOnj6xWq7p06aIlS5bUe52NVXXnLzMzs9w1aLFYKn1u3/UuJSVFffv2VevWrdWuXTsNHTpU+/btu+Zx7733noKCguTq6qrevXtrzZo1DVBt41STOeR34c8WLFig4OBg2xcGRkZG6l//+tdVj+H6s1fdOayr649A9F9WrFihxMREJScna9u2bQoJCVFMTIzy8vIqPcbd3V0nT560bd99910DVtz4FBUVKSQkRGlpaVXqf+jQId1zzz0aOHCgduzYocmTJ+uxxx7T2rVr67nSxqm683fZvn377K7Ddu3a1VOFjduGDRs0ceJEbdq0SZ9++qkuXryoQYMGqaioqNJjvvjiC40cOVKPPvqotm/frqFDh2ro0KHavXt3A1beeNRkDiV+F1524403atasWcrOztbWrVt1xx13aMiQIfr6668r7M/1V15151Cqo+vPgE2/fv2MiRMn2l6XlpYafn5+RkpKSoX9Fy9ebHh4eDRQdU2PJOODDz64ap8pU6YYvXr1smuLi4szYmJi6rGypqEq87d+/XpDkvHDDz80SE1NTV5eniHJ2LBhQ6V9HnjgAeOee+6xa4uIiDAef/zx+i6vSajKHPK78Oq8vLyMN998s8J9XH9Vc7U5rKvrjztE/6ekpETZ2dmKjo62tTk5OSk6OlpZWVmVHnfu3Dl17NhR/v7+10ywKC8rK8tuziUpJibmqnOO8kJDQ9W+fXvddddd+vzzzx1dTqNRUFAgSWrTpk2lfbgGr64qcyjxu7AipaWlWr58uYqKimzP27wS19/VVWUOpbq5/ghE/+f06dMqLS21PTLkMh8fn0rXY3Tv3l2LFi3SP/7xD73zzjsqKytT//79dezYsYYo+bqQk5NT4ZwXFhbqxx9/dFBVTUf79u21cOFCvf/++3r//ffl7++vAQMGaNu2bY4uzeHKyso0efJk/eIXv7B7tM+VKrsGzboO679VdQ75XWhv165datWqlaxWq373u9/pgw8+UM+ePSvsy/VXserMYV1df43i0R1NVWRkpF1i7d+/v3r06KE///nPmjlzpgMrg1l0795d3bt3t73u37+/Dh48qJdffllvv/22AytzvIkTJ2r37t367LPPHF1Kk1XVOeR3ob3u3btrx44dKigo0MqVKzV69Ght2LCh0n/QUV515rCurj8C0f/x9vaWs7OzcnNz7dpzc3Pl6+tbpTGaN2+uW265RQcOHKiPEq9Lvr6+Fc65u7u73NzcHFRV09avXz/Th4CEhAR9/PHH2rhxo2688car9q3sGqzq3/vrVXXm8Epm/13o4uKiLl26SJLCwsL05Zdf6pVXXtGf//zncn25/ipWnTm8Uk2vP94y+z8uLi4KCwtTRkaGra2srEwZGRlXfd/yv5WWlmrXrl1q3759fZV53YmMjLSbc0n69NNPqzznKG/Hjh2mvQYNw1BCQoI++OADrVu3ToGBgdc8hmvQXk3m8Er8LrRXVlam4uLiCvdx/VXN1ebwSjW+/mq9LPs6snz5csNqtRpLliwxvvnmG2PcuHGGp6enkZOTYxiGYTz88MPG1KlTbf1nzJhhrF271jh48KCRnZ1tPPjgg4arq6vx9ddfO+oUHO7s2bPG9u3bje3btxuSjHnz5hnbt283vvvuO8MwDGPq1KnGww8/bOv/7bffGi1atDCeeuopY8+ePUZaWprh7OxspKenO+oUHKq68/fyyy8bq1evNvbv32/s2rXLmDRpkuHk5GT8+9//dtQpONT48eMNDw8PIzMz0zh58qRtO3/+vK3PlX+PP//8c6NZs2bG3LlzjT179hjJyclG8+bNjV27djniFByuJnPI78KfTZ061diwYYNx6NAhY+fOncbUqVMNi8VifPLJJ4ZhcP1VRXXnsK6uPwLRFV599VXjpptuMlxcXIx+/foZmzZtsu2LiooyRo8ebXs9efJkW18fHx/j7rvvNrZt2+aAqhuPyx8Dv3K7PG+jR482oqKiyh0TGhpquLi4GJ06dTIWL17c4HU3FtWdv9mzZxudO3c2XF1djTZt2hgDBgww1q1b55jiG4GK5k6S3TV15d9jwzCMv//970a3bt0MFxcXo1evXsY///nPhi28EanJHPK78GePPPKI0bFjR8PFxcVo27atceedd9r+ITcMrr+qqO4c1tX1ZzEMw6jePSUAAIDrC2uIAACA6RGIAACA6RGIAACA6RGIAACA6RGIAACA6RGIAACA6RGIAACA6RGIAKAKAgIClJqa6ugyANQTAhGAJisnJ0dPPPGEOnXqJKvVKn9/f913333lng0FANfC0+4BNEmHDx/WL37xC3l6eurFF19U7969dfHiRa1du1YTJ07U3r17qz1maWmpLBaLnJz4b0XAbPhbD6BJmjBhgiwWi7Zs2aLhw4erW7du6tWrlxITE7Vp0yZJ0rx589S7d2+1bNlS/v7+mjBhgs6dO2cbY8mSJfL09NSHH36onj17ymq16siRI8rLy9N9990nNzc3BQYGatmyZY46TQANhDtEAJqc77//Xunp6XrhhRfUsmXLcvs9PT0lSU5OTpo/f74CAwP17bffasKECZoyZYpef/11W9/z589r9uzZevPNN3XDDTeoXbt2uv/++3XixAmtX79ezZs315NPPqm8vLyGOj0ADkAgAtDkHDhwQIZhKCgo6Kr9Jk+ebPtzQECAnn/+ef3ud7+zC0QXL17U66+/rpCQEEnSf/7zH/3rX//Sli1b1LdvX0nSX//6V/Xo0aPuTwRAo0EgAtDkGIZRpX7//ve/lZKSor1796qwsFCXLl3ShQsXdP78ebVo0UKS5OLiouDgYNsxe/bsUbNmzRQWFmZrCwoKst11AnB9Yg0RgCana9euslgsV104ffjwYd17770KDg7W+++/r+zsbKWlpUmSSkpKbP3c3NxksVjqvWYAjRuBCECT06ZNG8XExCgtLU1FRUXl9ufn5ys7O1tlZWV66aWXdOutt6pbt246ceLENccOCgrSpUuXlJ2dbWvbt2+f8vPz6/IUADQyBCIATVJaWppKS0vVr18/vf/++9q/f7/27Nmj+fPnKzIyUl26dNHFixf16quv6ttvv9Xbb7+thQsXXnPc7t27KzY2Vo8//rg2b96s7OxsPfbYY3Jzc2uAswLgKAQiAE1Sp06dtG3bNg0cOFC///3vdfPNN+uuu+5SRkaGFixYoJCQEM2bN0+zZ8/WzTffrGXLliklJaVKYy9evFh+fn6KiorSsGHDNG7cOLVr166ezwiAI1mMqq5OBAAAuE5xhwgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJje/wfvfDm10+usmQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "plt.bar(cards, alice_chooses_card())\n",
    "plt.xlabel('Card'); plt.ylabel('Probability'); plt.title(\"Alice's choice\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e255cd8d-29c9-4a77-959a-75838e720096",
   "metadata": {},
   "source": [
    "Let's try a more interesting distribution. Suppose Alice is likelier to pick a card with a higher value: for example, suppose $p(c) \\propto \\exp(\\beta \\cdot c)$, i.e. Alice chooses based on a softmax over card values with some inverse temperature $\\beta$. We can model this in memo by introducing a **parameter** `beta`, and editing the `wpp` of Alice's choice accordingly.\n",
    "\n",
    "Notice that **axes** like `c` appear in square brackets and **parameters** like `beta` appear in round parentheses in the definition of a memo. These are different! You should think of axes as representing the combinatorial space of possible actions/outcomes/hypotheses (square brackets ~ discrete tabular), and parameters as free parameters of the model or experiment (round parentheses ~ continuous knobs). \n",
    "\n",
    "Our new model, run with $\\beta = 3$, shows that Alice is overwhelmingly likelier to choose card 3 than either card 1 or card 2. She is also much likelier to choose card 2 over card 1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "44e4ff53-9567-4f19-832a-17978b643bd4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, \"Alice's choice\")"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAHHCAYAAABZbpmkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAuyklEQVR4nO3de1xVVd7H8e8B5eCNSyF4YwQ177dCQWwatEhMc8axi6ONIpl2wdJoKmxMcpxCuxhdULupTaOjT6aNpWmFt6fUTNS0UtPU9FEBSQWFAoX9/DEvT0OAwuHIgcXn/XqdV5511trnt1db+Lr3OvvYLMuyBAAAYCgPdxcAAABwJRF2AACA0Qg7AADAaIQdAABgNMIOAAAwGmEHAAAYjbADAACMRtgBAABGI+wAAACjEXYAXJbNZtNTTz3leL5gwQLZbDYdPnzYbTW5Ur9+/dS1a1eXbvPXcwbAfQg7QB03e/Zs2Ww2RUREuLsUh4thCgBcoZ67CwDgXgsXLlRISIi2bt2qAwcOqF27dpcdM2rUKP3pT3+S3W6vhgprp59++kn16vEjFqgJOLMD1GGHDh3Spk2bNGvWLDVt2lQLFy6s0DhPT095e3tz9uUSvL29CTtADUHYAeqwhQsXyt/fX4MHD9btt99e4bBT3pqdjz76SFFRUWrSpIl8fHzUu3dvLVq0qESfL774QgMHDpSvr68aNmyoqKgoff7555d9z23btikmJkYBAQFq0KCBQkNDdffdd1eo3orUJUnffvut+vfvr4YNG6ply5Z69tlnS/XJysrS2LFjFRQUJG9vb/Xo0UNvv/12qX5lrdk5duyYxo4dqxYtWshutys0NFT333+/CgsLHX3OnDmjSZMmKTg4WHa7Xe3atdPMmTNVXFxcoX0FUBr/7ADqsIULF2rYsGHy8vLSiBEjNGfOHH355Zfq3bt3pbe1YMEC3X333erSpYsmT54sPz8/7dixQ6tXr9bIkSMlSWvXrtUtt9yisLAwJSUlycPDQ/Pnz9eNN96o//3f/1V4eHiZ287KytKAAQPUtGlTJSYmys/PT4cPH9ayZctcUpcknT59WgMHDtSwYcN05513aunSpXr88cfVrVs33XLLLZL+c2mqX79+OnDggCZMmKDQ0FC9++67GjNmjM6cOaOJEyeWW8fx48cVHh6uM2fOaPz48erYsaOOHTumpUuXKj8/X15eXsrPz1dUVJSOHTume++9V7/5zW+0adMmTZ48WSdOnFBKSkol/o8AcLAA1Enbtm2zJFmffPKJZVmWVVxcbLVq1cqaOHFiqb6SrKSkJMfz+fPnW5KsQ4cOWZZlWWfOnLGaNGliRUREWD/99FOJscXFxY7/XnPNNVZMTIyjzbIsKz8/3woNDbVuvvnmcmtdvny5Jcn68ssvK7WPFanLsiwrKirKkmT94x//cLQVFBRYzZo1s2677TZHW0pKiiXJ+uc//+loKywstCIjI63GjRtbubm5jvZfz9no0aMtDw+PMvfhYi3Tp0+3GjVqZH333XclXk9MTLQ8PT2tI0eOVGr/AfwHl7GAOmrhwoUKCgpS//79Jf3nssvw4cO1ePFiFRUVVWpbn3zyic6ePavExER5e3uXeO3iup6dO3dq//79GjlypH788UdlZ2crOztbeXl5uummm7Rx48ZyL9X4+flJkj788EOdP3/epXVd1LhxY/35z392PPfy8lJ4eLgOHjzoaFu1apWaNWumESNGONrq16+vhx56SOfOndOGDRvKrKO4uFjvv/++hgwZol69epV6/WIt7777rm644Qb5+/s75ic7O1vR0dEqKirSxo0bK7zvAH7BZSygDioqKtLixYvVv39/HTp0yNEeERGhF154QWlpaRowYECFt/f9999L0iXvVbN//35JUmxsbLl9cnJy5O/vX6o9KipKt912m6ZNm6YXX3xR/fr109ChQzVy5MhLfiKsInVd1KpVq1IByN/fX7t27XI8/+GHH3TNNdfIw6PkvxM7derkeL0sJ0+eVG5u7mXr2L9/v3bt2qWmTZuW+XpWVtZl9wNAaYQdoA5au3atTpw4ocWLF2vx4sWlXl+4cGGlwk5FXDxr89xzz6lnz55l9mncuHGZ7TabTUuXLtWWLVv0wQcfaM2aNbr77rv1wgsvaMuWLeWOqwxPT88y2y3LqvK2K6q4uFg333yzHnvssTJfb9++fbXVApiEsAPUQQsXLlRgYKBSU1NLvbZs2TItX75cc+fOVYMGDSq0vbZt20qSvv7663Lv03Oxj4+Pj6Kjo52qu0+fPurTp4+efvppLVq0SHfddZcWL16se+65x+m6KqN169batWuXiouLS5zd2bt3r+P1sjRt2lQ+Pj76+uuvL7n9tm3b6ty5c07PD4CysWYHqGN++ukn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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "@memo\n",
    "def alice_chooses_card[c: cards](beta):  # notice the new parameter beta\n",
    "    cast: [alice]\n",
    "    alice: chooses(c in cards, wpp=exp(beta * c))  # notice new wpp\n",
    "    return E[alice.c == c]\n",
    "\n",
    "plt.bar(cards, alice_chooses_card(3.0))\n",
    "plt.xlabel('Card'); plt.ylabel('Probability'); plt.title(\"Alice's choice\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "151444df-16b6-49e6-832c-4b387fbc7cef",
   "metadata": {},
   "source": [
    "Now, let's introduce a new agent, Bob, who has his own set of the three cards. Bob chooses a card at the same time as Alice chooses a card. The value of Bob's card doesn't matter to him, other than that he wants avoid choosing the same card as Alice. Bob knows that Alice is likelier to pick higher-value cards. \n",
    "\n",
    "First, take a moment to test your intuition: what do you expect? Knowing what he does about Alice, Bob will undoubtedly avoid card 3. We should therefore expect him to probably pick card 1 or card 2, with a slight preference for card 1.\n",
    "\n",
    "To model this in memo, we create a new memo called `bob_chooses_card`, where the cast includes both Alice and Bob. Then, we use the **thinks** statement to express _Bob's mental model of Alice_. Notice that Alice's `wpp` references the `alice_chooses_card` memo we defined above, with $\\beta=3$ (i.e. Bob knows Alice's $\\beta$). Importantly, while Bob knows _how_ Alice chooses a card, he does _not_ know what Alice's card is: internally, memo models Bob's uncertainty over Alice's choice.\n",
    "\n",
    "Finally, we model Bob's choice as avoiding Alice's choice (`wpp=E[~(c == alice.c)]`). Notice that we need the expected value because Bob doesn't know `alice.c`. Finally, we compute a probability distribution over Bob's card choices as before (`E[bob.c == c]`)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "21c3c3a7-5672-4f7c-a485-56f57ca14f28",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, \"Bob's choice\")"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAHHCAYAAABZbpmkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAv7UlEQVR4nO3de1RVZf7H8c8B5eAN0FBQI/F+FwxDcX6FzlCYadnVsSaJ1GqU1KGp0Zl+klk/tEzpgtpU6kzq6GRllykvkZdV4VigaaamlZdUQCcFhQLl7N8fszx1AhQOBw48vF9r7bU4z3n2Pt/9rC183PvZZ9ssy7IEAABgKB9vFwAAAFCTCDsAAMBohB0AAGA0wg4AADAaYQcAABiNsAMAAIxG2AEAAEYj7AAAAKMRdgAAgNEIOwBqjM1mU1JSkrfLKGPIkCHq06ePR7dps9n02GOPeXSbADyDsANAS5culc1mc1natGmjoUOH6v3336+1zweAmtDI2wUAqDsef/xxdezYUZZlKTc3V0uXLtXw4cP1zjvvaMSIEd4ur0774Ycf1KgRv1KBuoh/mQCcrr/+eg0YMMD5ety4cQoJCdE//vEPws4l+Pv7e7sEABXgMhaACgUFBalJkyZlzlgUFhbqoYceUlhYmOx2u7p37665c+fKsqxyt7N8+XJ1795d/v7+ioqK0pYtWy752Z999pni4+MVHBysJk2aqGPHjrr33nsrVff777+v2NhYtWjRQgEBAbrqqqu0YsWKMv2+/PJLDR06VE2bNlX79u311FNPlemTl5fnDH3+/v6KiIjQ3/72tzL9ypuzc/ToUY0bN07t2rWT3W5Xx44d9fvf/14lJSXOPqdPn9bUqVOdY9mlSxfNmTNHDoejUvsK4NI4swPAKT8/XydPnpRlWcrLy9Pzzz+vs2fP6ne/+52zj2VZuvHGG7Vx40aNGzdOkZGRWrdunR5++GEdPXpU8+fPd9nm5s2btWrVKk2ePFl2u10LFizQsGHDtG3btgonCefl5em6665T69atNW3aNAUFBengwYN64403LrkPS5cu1b333qvevXtr+vTpCgoK0vbt27V27Vrdeeedzn6nTp3SsGHDdMstt+iOO+7Q6tWr9ac//Ul9+/bV9ddfL+m/l6aGDBmiAwcOKCkpSR07dtRrr72me+65R6dPn9aUKVMqrOPYsWOKjo7W6dOndd9996lHjx46evSoVq9eraKiIvn5+amoqEixsbE6evSo7r//fl1xxRX65JNPNH36dB0/flxpaWmX3F8AlWABaPCWLFliSSqz2O12a+nSpS5916xZY0mynnjiCZf22267zbLZbNaBAwecbRe289lnnznbDh06ZPn7+1s333xzhfW8+eabliTr008/rdJ+nD592mrRooU1cOBA64cffnB5z+FwOH+OjY21JFl///vfnW3FxcVWaGiodeuttzrb0tLSLEnWsmXLnG0lJSVWTEyM1bx5c6ugoMBlX1NSUpyvx44da/n4+JS7DxdqmTVrltWsWTPrq6++cnl/2rRplq+vr3X48OEq7T+A8nEZC4BTenq6NmzYoA0bNmjZsmUaOnSoxo8f73JG5b333pOvr68mT57ssu5DDz0ky7LK3L0VExOjqKgo5+srrrhCN910k9atW6fS0tJy6wgKCpIkvfvuuzp37lyl69+wYYPOnDmjadOmlZlD88u7vZo3b+5yxsrPz0/R0dH65ptvXPY1NDRUY8aMcbY1btxYkydP1tmzZ7V58+Zy63A4HFqzZo1GjhzpMgfql7W89tpruvrqq9WyZUudPHnSucTFxam0tLRSl/sAXBqXsQA4RUdHu/xxHjNmjPr376+kpCSNGDFCfn5+OnTokNq1a6cWLVq4rNuzZ09J0qFDh1zau3btWuZzunXrpqKiIp04cUKhoaFl3o+NjdWtt96qmTNnav78+RoyZIhGjRqlO++8U3a7vcL6v/76a0mq1HfoXH755WUCUMuWLbVz507n60OHDqlr167y8XH9f2FF+3rBiRMnVFBQcMk69u/fr507d6p169blvp+Xl3fJ/QBwaYQdABXy8fHR0KFD9eyzz2r//v3q3bt3rXyuzWbT6tWrtXXrVr3zzjtat26d7r33Xj3zzDPaunWrmjdvXu3P8PX1LbfdqmCSdU1wOBy69tpr9cgjj5T7frdu3WqtFsBkhB0AF3X+/HlJ0tmzZyVJHTp00AcffKAzZ864nN3Zu3ev8/2f279/f5ltfvXVV2ratGmFZzQuGDRokAYNGqQnn3xSK1as0F133aWVK1dq/Pjx5fbv3LmzJOmLL75Qly5dKrmHFevQoYN27twph8Phcnanon29oHXr1goICNAXX3xx0e137txZZ8+eVVxcXLVrBVAx5uwAqNC5c+e0fv16+fn5OS/dDB8+XKWlpXrhhRdc+s6fP182m815J9MFmZmZys7Odr4+cuSI3nrrLV133XUVnl05depUmTMskZGRkqTi4uIK673uuuvUokULpaam6scff3R5z50zNsOHD1dOTo5WrVrlbDt//ryef/55NW/eXLGxseWu5+Pjo1GjRumdd97RZ599Vub9C7XccccdyszM1Lp168r0OX36tDNoAqgezuwAcHr//fedZy3y8vK0YsUK7d+/X9OmTVNAQIAkaeTIkRo6dKj+8pe/6ODBg4qIiND69ev11ltvaerUqc6zKxf06dNH8fHxLreeS9LMmTMrrONvf/ubFixYoJtvvlmdO3fWmTNn9NJLLykgIEDDhw+vcL2AgADNnz9f48eP11VXXaU777xTLVu21Oeff66ioqJyvx/nYu677z69+OKLuueee5SVlaXw8HCtXr1aH3/8sdLS0srMW/q5//u//9P69esVGxur++67Tz179tTx48f12muv6aOPPlJQUJAefvhhvf322xoxYoTuueceRUVFqbCwULt27dLq1at18OBBBQcHV6lmAOXw6r1gAOqE8m499/f3tyIjI62FCxe63LZtWZZ15swZ6w9/+IPVrl07q3HjxlbXrl2tp59+ukw/SdakSZOsZcuWWV27drXsdrvVv39/a+PGjRetJzs72xozZox1xRVXWHa73WrTpo01YsQIl1vYL+btt9+2Bg8ebDVp0sQKCAiwoqOjrX/84x/O92NjY63evXuXWS8hIcHq0KGDS1tubq6VmJhoBQcHW35+flbfvn2tJUuWlFlXv7j13LL+e5v92LFjrdatW1t2u93q1KmTNWnSJKu4uNjZ58yZM9b06dOtLl26WH5+flZwcLA1ePBga+7cuVZJSUml9hfAxdksqxZn4wEAANQy5uwAAACjEXYAAIDRCDsAAMBohB0AAGA0wg4AADAaYQcAABitwX2poMPh0LFjx9SiRYsyDwEEAAB1k2VZOnPmjNq1a1fm4byX0uDCzrFjxxQWFubtMgAAgBuOHDmiyy+/vErrNLiwc+Hr3Y8cOeL8+nsAAFC3FRQUKCws7KKPaalIgws7Fy5dBQQEEHYAAKhn3JmCwgRlAABgNMIOAAAwGmEHAAAYjbADAACMRtgBAABGI+wAAACjEXYAAIDRCDsAAMBohB0AAGA0wg4AADBanQg7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Bv8HPikpSe+++662bNmiyy+//KJ9KzoGK/tv3lRVGcNfaui/B/38/NSlSxdJUlRUlD799FM9++yzevHFF8v05fgrX1XG8JfcPf4azGUsPz8/RUVFKSMjw9nmcDiUkZFx0WuFP1daWqpdu3apbdu2NVWmUWJiYlzGW5I2bNhQ6fFGWTt27Giwx59lWUpKStKbb76pDz/8UB07drzkOhyDrtwZw1/i96Arh8Oh4uLict/j+Kuci43hL7l9/FV7inM9snLlSstut1tLly61vvzyS+u+++6zgoKCrJycHMuyLOvuu++2pk2b5uw/c+ZMa926ddbXX39tZWVlWb/97W8tf39/a/fu3d7aBa86c+aMtX37dmv79u2WJGvevHnW9u3brUOHDlmWZVnTpk2z7r77bmf/b775xmratKn18MMPW3v27LHS09MtX19fa+3atd7aBa+q6vjNnz/fWrNmjbV//35r165d1pQpUywfHx/rgw8+8NYueNXvf/97KzAw0Nq0aZN1/Phx51JUVOTs88t/wx9//LHVqFEja+7cudaePXuslJQUq3HjxtauXbu8sQte584Y8nvwJ9OmTbM2b95sffvtt9bOnTutadOmWTabzVq/fr1lWRx/lVHVMfTU8degwo5lWdbzzz9vXXHFFZafn58VHR1tbd261flebGyslZCQ4Hw9depUZ9+QkBBr+PDhVnZ2theqrhsu3Ar9y+XCmCUkJFixsbFl1omMjLT8/PysTp06WUuWLKn1uuuKqo7fnDlzrM6dO1v+/v5Wq1atrCFDhlgffvihd4qvA8obO0kux9Qv/w1blmX985//tLp162b5+flZvXv3tv71r3/VbuF1iDtjyO/Bn9x7771Whw4dLD8/P6t169bWb37zG+cfacvi+KuMqo6hp44/m2VZVtXOBQEAANQfDWbODgAAaJgIOwAAwGiEHQAAYDTCDgAAMBphBwAAGI2wAwAAjEbYAQAARiPsAICk8PBwpaWlebsMADWAsAOgzsrJydGDDz6oTp06yW63KywsTCNHjizzvCEAuJgG89RzAPXLwYMH9atf/UpBQUF6+umn1bdvX507d07r1q3TpEmTtHfv3ipvs7S0VDabTT4+/D8PaEj4Fw+gTpo4caJsNpu2bdumW2+9Vd26dVPv3r2VnJysrVu3SpLmzZunvn37qlmzZgoLC9PEiRN19uxZ5zaWLl2qoKAgvf322+rVq5fsdrsOHz6svLw8jRw5Uk2aNFHHjh21fPlyb+0mgFrAmR0Adc7333+vtWvX6sknn1SzZs3KvB8UFCRJ8vHx0XPPPaeOHTvqm2++0cSJE/XII49owYIFzr5FRUWaM2eOXn75ZV122WVq06aNbrvtNh07dkwbN25U48aNNXnyZOXl5dXW7gGoZYQdAHXOgQMHZFmWevTocdF+U6dOdf4cHh6uJ554Qg888IBL2Dl37pwWLFigiIgISdJXX32l999/X9u2bdNVV10lSXrllVfUs2dPz+8IgDqBsAOgzrEsq1L9PvjgA6Wmpmrv3r0qKCjQ+fPn9eOPP6qoqEhNmzaVJPn5+alfv37Odfbs2aNGjRopKirK2dajRw/n2SIA5mHODoA6p2vXrrLZbBedhHzw4EGNGDFC/fr10+uvv66srCylp6dLkkpKSpz9mjRpIpvNVuM1A6i7CDsA6pxWrVopPj5e6enpKiwsLPP+6dOnlZWVJYfDoWeeeUaDBg1St27ddOzYsUtuu0ePHjp//ryysrKcbfv27dPp06c9uQsA6hDCDoA6KT09XaWlpYqOjtbrr7+u/fv3a8+ePXruuecUExOjLl266Ny5c3r++ef1zTff6NVXX9WiRYsuud3u3btr2LBhuv/++/Xvf/9bWVlZGj9+vJo0aVILewXAGwg7AOqkTp06KTs7W0OHDtVDDz2kPn366Nprr1VGRoYWLlyoiIgIzZs3T3PmzFGfPn20fPlypaamVmrbS5YsUbt27RQbG6tbbrlF9913n9q0aVPDewTAW2xWZWcCAgAA1EOc2QEAAEYj7AAAAKMRdgAAgNEIOwAAwGiEHQAAYDTCDgAAMBphBwAAGI2wAwAAjEbYAQAARiPsAAAAoxF2AACA0Qg7AADAaP8Pk5yRXc0Aoz4AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "@memo\n",
    "def bob_chooses_card[c: cards]():\n",
    "    cast: [alice, bob]\n",
    "    bob: thinks[  # Bob's mental model of Alice\n",
    "        alice: chooses(\n",
    "            c in cards,\n",
    "            wpp=alice_chooses_card[c](3.0)  # reference previous memo\n",
    "        )\n",
    "    ]\n",
    "\n",
    "    # Bob avoids Alice's card\n",
    "    bob: chooses(c in cards, wpp=E[~(c == alice.c)])\n",
    "    return E[bob.c == c]\n",
    "plt.bar(cards, bob_chooses_card())\n",
    "plt.xlabel('Card'); plt.ylabel('Probability'); plt.title(\"Bob's choice\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "618c2904-0b4c-4a24-8884-1ccc4b654910",
   "metadata": {},
   "source": [
    "This is indeed the result we expect: Bob is roughly ambivalent between cards 1 and 2, but avoids card 3.\n",
    "\n",
    "Let us finish this section by visualizing the full matrix of possible game outcomes as a heatmap. We'll do this by creating a memo with _two_ axes: one for Alice's card and one for Bob's card."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "44d225bb-50fe-4959-ab14-c17286a5fc99",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAc8AAAG2CAYAAAAZVQ0iAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAArT0lEQVR4nO3de3hU1b3/8c8khAkoGYKQG0S5KReBhLuBY4gSDRcR1OcUKAoiolhQMdZLzlNF8NjUCl6OUpGqUBUO3vGIioUgUDGCBIKASAWVIBJAQ2ZI0EDI+v3Rn1NjEswKM5mZ5P16nv087rXX2vNdTcePe8++OIwxRgAAoNbCAl0AAAChhvAEAMAS4QkAgCXCEwAAS4QnAACWCE8AACwRngAAWCI8AQCwRHgCAGCJ8AQAwFLIhGdRUZEmTJigqKgotWzZUlOmTFFJSclpx6SlpcnhcFRapk2bVk8VAwAaKkeoPNt2+PDhOnjwoJ555hmdPHlSkydPVv/+/bV06dIax6SlpemCCy7QnDlzvG3NmzdXVFRUfZQMAGigmgS6gNrYtWuXVq5cqU8++UT9+vWTJD355JMaMWKE5s6dq4SEhBrHNm/eXHFxcfVVKgCgEQiJ8MzNzVXLli29wSlJ6enpCgsL08aNG3XVVVfVOHbJkiV66aWXFBcXp1GjRum+++5T8+bNa+xfVlamsrIy73pFRYWKiop0zjnnyOFw+GZCAIB6YYzRsWPHlJCQoLAw3/1SGRLhWVhYqJiYmEptTZo0UatWrVRYWFjjuN/+9rc677zzlJCQoE8//VT33HOPdu/erTfeeKPGMdnZ2Zo9e7bPagcABN7+/fvVrl07n+0voOF577336uGHHz5tn127dtV5/zfddJP3n3v27Kn4+HgNHTpUe/fuVadOnaodk5WVpczMTO+62+3Wueeeq//QCDVRRJ1rQWgIj24Z6BJQj17b+I9AlwA/85RU6Lw+X6tFixY+3W9Aw/POO+/U9ddff9o+HTt2VFxcnA4fPlypvby8XEVFRVa/Zw4cOFCStGfPnhrD0+l0yul0Vmlvogg1cRCeDV24o2mgS0A9imoRMjcc4Az5+me3gIZnmzZt1KZNm1/tl5KSouLiYuXl5alv376SpDVr1qiiosIbiLWRn58vSYqPj69TvQAASCFyn2e3bt00bNgwTZ06VZs2bdKGDRs0Y8YMjRs3znul7YEDB9S1a1dt2rRJkrR37149+OCDysvL09dff63/+7//08SJE5WamqpevXoFcjoAgBAXEuEp/euq2a5du2ro0KEaMWKE/uM//kMLFy70bj958qR2796t48ePS5KaNm2q1atX6/LLL1fXrl1155136pprrtHbb78dqCkAABqIkHlIQqB4PB65XC6laTS/eTYC4dHRgS4B9ejdnR8EugT4medYhaIv+FJut9unD8gJmSNPAACCBeEJAIAlwhMAAEuEJwAAlghPAAAsEZ4AAFgiPAEAsER4AgBgifAEAMAS4QkAgCXCEwAAS4QnAACWCE8AACwRngAAWCI8AQCwRHgCAGCJ8AQAwBLhCQCAJcITAABLhCcAAJYITwAALBGeAABYIjwBALBEeAIAYInwBADAEuEJAIAlwhMAAEuEJwAAlghPAAAsEZ4AAFgiPAEAsER4AgBgifAEAMAS4QkAgCXCEwAAS4QnAACWCE8AACwRngAAWCI8AQCwRHgCAGCJ8AQAwBLhCQCAJcITAABLhCcAAJYITwAALBGeAABYIjwBALBEeAIAYInwBADAEuEJAIAlwhMAAEshF57z589X+/btFRkZqYEDB2rTpk2n7f/qq6+qa9euioyMVM+ePfXuu+/WU6UAgIYqpMLz5ZdfVmZmpmbNmqUtW7YoKSlJGRkZOnz4cLX9P/roI40fP15TpkzR1q1bNWbMGI0ZM0Y7duyo58oBAA2JwxhjAl1EbQ0cOFD9+/fXU089JUmqqKhQYmKibr31Vt17771V+o8dO1alpaVasWKFt+2iiy5ScnKyFixYUKvP9Hg8crlcStNoNXFE+GYiCFrh0dGBLgH16N2dHwS6BPiZ51iFoi/4Um63W1FRUT7bb8gceZ44cUJ5eXlKT0/3toWFhSk9PV25ubnVjsnNza3UX5IyMjJq7C9JZWVl8ng8lRYAAH4uZMLzu+++06lTpxQbG1upPTY2VoWFhdWOKSwstOovSdnZ2XK5XN4lMTHxzIsHADQoIROe9SUrK0tut9u77N+/P9AlAQCCTJNAF1BbrVu3Vnh4uA4dOlSp/dChQ4qLi6t2TFxcnFV/SXI6nXI6nWdeMACgwQqZI8+mTZuqb9++ysnJ8bZVVFQoJydHKSkp1Y5JSUmp1F+SVq1aVWN/AABqI2SOPCUpMzNTkyZNUr9+/TRgwAA9/vjjKi0t1eTJkyVJEydOVNu2bZWdnS1Juv322zVkyBDNmzdPI0eO1LJly7R582YtXLgwkNMAAIS4kArPsWPH6siRI7r//vtVWFio5ORkrVy50ntRUEFBgcLC/n0wPWjQIC1dulR/+MMf9F//9V86//zztXz5cvXo0SNQUwAANAAhdZ9nIHCfZ+PCfZ6NC/d5NnyN/j5PAACCBeEJAIAlwhMAAEuEJwAAlghPAAAsEZ4AAFgiPAEAsER4AgBgifAEAMAS4QkAgCXCEwAAS4QnAACWCE8AACwRngAAWCI8AQCwRHgCAGCJ8AQAwBLhCQCAJcITAABLhCcAAJYITwAALBGeAABYIjwBALBEeAIAYInwBADAEuEJAIAlwhMAAEuEJwAAlghPAAAsEZ4AAFgiPAEAsER4AgBgifAEAMAS4QkAgCXCEwAAS4QnAACWCE8AACwRngAAWCI8AQCwRHgCAGCJ8AQAwBLhCQCAJcITAABLhCcAAJYITwAALBGeAABYIjwBALBEeAIAYInwBADAEuEJAIClkAvP+fPnq3379oqMjNTAgQO1adOmGvsuXrxYDoej0hIZGVmP1QIAGqKQCs+XX35ZmZmZmjVrlrZs2aKkpCRlZGTo8OHDNY6JiorSwYMHvcu+ffvqsWIAQEMUUuH56KOPaurUqZo8ebK6d++uBQsWqHnz5nr++edrHONwOBQXF+ddYmNj67FiAEBDFDLheeLECeXl5Sk9Pd3bFhYWpvT0dOXm5tY4rqSkROedd54SExM1evRo7dy587SfU1ZWJo/HU2kBAODnmgS6gNr67rvvdOrUqSpHjrGxsfr888+rHdOlSxc9//zz6tWrl9xut+bOnatBgwZp586dateuXbVjsrOzNXv2bJ/XDyD4fFNeEugS4GfHyiv8st+QOfKsi5SUFE2cOFHJyckaMmSI3njjDbVp00bPPPNMjWOysrLkdru9y/79++uxYgBAKAiZI8/WrVsrPDxchw4dqtR+6NAhxcXF1WofERER6t27t/bs2VNjH6fTKafTeUa1AgAatpA58mzatKn69u2rnJwcb1tFRYVycnKUkpJSq32cOnVK27dvV3x8vL/KBAA0AiFz5ClJmZmZmjRpkvr166cBAwbo8ccfV2lpqSZPnixJmjhxotq2bavs7GxJ0pw5c3TRRRepc+fOKi4u1iOPPKJ9+/bpxhtvDOQ0AAAhLqTCc+zYsTpy5Ijuv/9+FRYWKjk5WStXrvReRFRQUKCwsH8fTB89elRTp05VYWGhoqOj1bdvX3300Ufq3r17oKYAAGgAHMYYE+gigpnH45HL5VKaRquJIyLQ5cDPwqOjA10C6tHCbW8HugT42bFjFerR/bDcbreioqJ8tt+Q+c0TAIBgQXgCAGCJ8AQAwBLhCQCAJcITAABLhCcAAJYITwAALBGeAABYIjwBALBEeAIAYInwBADAEuEJAIAlwhMAAEuEJwAAlghPAAAsEZ4AAFgiPAEAsER4AgBgqU7hWVxcrGeffVZZWVkqKiqSJG3ZskUHDhzwaXEAAASjJrYDPv30U6Wnp8vlcunrr7/W1KlT1apVK73xxhsqKCjQCy+84I86AQAIGtZHnpmZmbr++uv1xRdfKDIy0ts+YsQIrV+/3qfFAQAQjKzD85NPPtHNN99cpb1t27YqLCz0SVEAAAQz6/B0Op3yeDxV2v/5z3+qTZs2PikKAIBgZh2eV155pebMmaOTJ09KkhwOhwoKCnTPPffommuu8XmBAAAEG+vwnDdvnkpKShQTE6MffvhBQ4YMUefOndWiRQs99NBD/qgRAICgYn21rcvl0qpVq7RhwwZt27ZNJSUl6tOnj9LT0/1RHwAAQcc6PH8yePBgDR482Je1AAAQEqxP29522236n//5nyrtTz31lGbOnOmLmgAACGrW4fn6669Xe8Q5aNAgvfbaaz4pCgCAYGYdnt9//71cLleV9qioKH333Xc+KQoAgGBmHZ6dO3fWypUrq7S/99576tixo0+KAgAgmFlfMJSZmakZM2boyJEjuvTSSyVJOTk5mjdvnh5//HFf1wcAQNCxDs8bbrhBZWVleuihh/Tggw9Kktq3b6+nn35aEydO9HmBAAAEmzrdqnLLLbfolltu0ZEjR9SsWTOdffbZvq4LAICgVef7PCXxLFsAQKNUq/Ds06ePcnJyFB0drd69e8vhcNTYd8uWLT4rDgCAYFSr8Bw9erScTqckacyYMf6sBwCAoOcwxphAFxHMPB6PXC6X0jRaTRwRgS4HfhYeHR3oElCPFm57O9AlwM+OHatQj+6H5Xa7FRUV5bP91vk3z7y8PO3atUuSdOGFF6p3794+KwoAgGBmHZ6HDx/WuHHjtHbtWrVs2VKSVFxcrEsuuUTLli3jIiIAQINn/YShW2+9VceOHdPOnTtVVFSkoqIi7dixQx6PR7fddps/agQAIKhYH3muXLlSq1evVrdu3bxt3bt31/z583X55Zf7tDgAAIKR9ZFnRUWFIiKqXjgTERGhiooKnxQFAEAwsw7PSy+9VLfffru+/fZbb9uBAwd0xx13aOjQoT4tDgCAYGQdnk899ZQ8Ho/at2+vTp06qVOnTurQoYM8Ho+efPJJf9QIAEBQsf7NMzExUVu2bNHq1av1+eefS5K6deum9PR0nxcHAEAwqtN9ng6HQ5dddpkuu+wyX9cDAEDQq1N45uTkKCcnR4cPH65ykdDzzz/vk8IAAAhW1uE5e/ZszZkzR/369VN8fPxpHxIPAEBDZB2eCxYs0OLFi3Xdddf5ox4AAIKe9dW2J06c0KBBg/xRCwAAIcE6PG+88UYtXbrUH7X8qvXr12vUqFFKSEiQw+HQ8uXLf3XM2rVr1adPHzmdTnXu3FmLFy/2e50AgIatVqdtMzMzvf9cUVGhhQsXavXq1erVq1eVpw09+uijvq3wZ0pLS5WUlKQbbrhBV1999a/2/+qrrzRy5EhNmzZNS5YsUU5Ojm688UbFx8crIyPDb3UCABq2WoXn1q1bK60nJydLknbs2FGp3d8XDw0fPlzDhw+vdf8FCxaoQ4cOmjdvnqR/3Y/64Ycf6rHHHiM8AQB1Vqvw/OCDD/xdh1/k5uZWeXhDRkaGZs6cWeOYsrIylZWVedc9Ho+/ygMAhCjr3zzdbreKioqqtBcVFQVd0BQWFio2NrZSW2xsrDwej3744Ydqx2RnZ8vlcnmXxMTE+igVABBCrMNz3LhxWrZsWZX2V155RePGjfNJUYGUlZUlt9vtXfbv3x/okgAAQcY6PDdu3KhLLrmkSntaWpo2btzok6J8JS4uTocOHarUdujQIUVFRalZs2bVjnE6nYqKiqq0AADwc9bhWVZWpvLy8irtJ0+erPFUaKCkpKQoJyenUtuqVauUkpISoIoAAA2BdXgOGDBACxcurNK+YMEC9e3b1ydF1aSkpET5+fnKz8+X9K9bUfLz81VQUCDpX6dcJ06c6O0/bdo0ffnll7r77rv1+eef6y9/+YteeeUV3XHHHX6tEwDQsFk/nu+///u/lZ6erm3btnlffp2Tk6NPPvlEf//7331e4M9t3ry50injn+4/nTRpkhYvXqyDBw96g1SSOnTooHfeeUd33HGHnnjiCbVr107PPvsst6kAAM6IwxhjbAfl5+frkUceUX5+vpo1a6ZevXopKytL559/vj9qDCiPxyOXy6U0jVYTR8SvD0BIC4+ODnQJqEcLt70d6BLgZ8eOVahH98Nyu90+vYalTq8kS05O1pIlS3xWBAAAocT6N08AABo7whMAAEuEJwAAlghPAAAsnVF47t+/n8fXAQAaHevwLC8v13333SeXy6X27durffv2crlc+sMf/qCTJ0/6o0YAAIKK9a0qt956q9544w39+c9/9j7mLjc3Vw888IC+//57Pf300z4vEgCAYGIdnkuXLtWyZcsqvZS6V69eSkxM1Pjx4wlPAECDZ33a1ul0qn379lXaO3TooKZNm/qiJgAAgpp1eM6YMUMPPvigysrKvG1lZWV66KGHNGPGDJ8WBwBAMKrVadurr7660vrq1avVrl07JSUlSZK2bdumEydOeB8UDwBAQ1ar8HS5XJXWr7nmmkrriYmJvqsIAIAgV6vwXLRokb/rAAAgZNTprSqSdOTIEe3evVuS1KVLF7Vp08ZnRQEAEMysLxgqLS3VDTfcoPj4eKWmpio1NVUJCQmaMmWKjh8/7o8aAQAIKtbhmZmZqXXr1untt99WcXGxiouL9dZbb2ndunW68847/VEjAABBxfq07euvv67XXntNaWlp3rYRI0aoWbNm+s1vfsNDEgAADZ71kefx48cVGxtbpT0mJobTtgCARsE6PFNSUjRr1iz9+OOP3rYffvhBs2fP9j7rFgCAhsz6tO0TTzyhjIyMKg9JiIyM1Pvvv+/zAgEACDbW4dmjRw998cUXWrJkiT7//HNJ0vjx4zVhwgQ1a9bM5wUCABBs6nSfZ/PmzTV16lRf1wIAQEiwDs/vv/9e55xzjiRp//79+utf/6offvhBo0aNUmpqqs8LBAAg2NT6gqHt27erffv2iomJUdeuXZWfn6/+/fvrscce08KFC3XppZdq+fLlfiwVAIDgUOvwvPvuu9WzZ0+tX79eaWlpuuKKKzRy5Ei53W4dPXpUN998s/70pz/5s1YAAIJCrU/bfvLJJ1qzZo169eqlpKQkLVy4UL/73e8UFvav/L311lt10UUX+a1QAACCRa2PPIuKihQXFydJOvvss3XWWWcpOjrauz06OlrHjh3zfYUAAAQZq4ckOByO064DANAYWF1te/3118vpdEqSfvzxR02bNk1nnXWWJKmsrMz31QEAEIRqHZ6TJk2qtH7ttddW6TNx4sQzrwgAgCBX6/BctGiRP+sAACBkWD8YHgCAxo7wBADAEuEJAIAlwhMAAEuEJwAAlghPAAAsEZ4AAFgiPAEAsER4AgBgifAEAMAS4QkAgCXCEwAAS4QnAACWCE8AACwRngAAWCI8AQCwRHgCAGCJ8AQAwFJIhef69es1atQoJSQkyOFwaPny5aftv3btWjkcjipLYWFh/RQMAGiQQio8S0tLlZSUpPnz51uN2717tw4ePOhdYmJi/FQhAKAxaBLoAmwMHz5cw4cPtx4XExOjli1b+r4gAECjFFJHnnWVnJys+Ph4XXbZZdqwYUOgywEAhLiQOvK0FR8frwULFqhfv34qKyvTs88+q7S0NG3cuFF9+vSpdkxZWZnKysq86x6Pp77KRRA4dfRooEtAPbopaVSgS4CflZsTkv7m8/026PDs0qWLunTp4l0fNGiQ9u7dq8cee0wvvvhitWOys7M1e/bs+ioRABCCGsVp258bMGCA9uzZU+P2rKwsud1u77J///56rA4AEAoa9JFndfLz8xUfH1/jdqfTKafTWY8VAQBCTUiFZ0lJSaWjxq+++kr5+flq1aqVzj33XGVlZenAgQN64YUXJEmPP/64OnTooAsvvFA//vijnn32Wa1Zs0Z///vfAzUFAEADEFLhuXnzZl1yySXe9czMTEnSpEmTtHjxYh08eFAFBQXe7SdOnNCdd96pAwcOqHnz5urVq5dWr15daR8AANhyGGNMoIsIZh6PRy6XS2karSaOiECXA8CHwqOjA10C/KzcnFDO0b/J7XYrKirKZ/ttdBcMAQBwpghPAAAsEZ4AAFgiPAEAsER4AgBgifAEAMAS4QkAgCXCEwAAS4QnAACWCE8AACwRngAAWCI8AQCwRHgCAGCJ8AQAwBLhCQCAJcITAABLhCcAAJYITwAALBGeAABYIjwBALBEeAIAYInwBADAEuEJAIAlwhMAAEuEJwAAlghPAAAsEZ4AAFgiPAEAsER4AgBgifAEAMAS4QkAgCXCEwAAS4QnAACWCE8AACwRngAAWCI8AQCwRHgCAGCJ8AQAwBLhCQCAJcITAABLhCcAAJYITwAALBGeAABYIjwBALBEeAIAYInwBADAEuEJAIAlwhMAAEuEJwAAlghPAAAsEZ4AAFgKmfDMzs5W//791aJFC8XExGjMmDHavXv3r4579dVX1bVrV0VGRqpnz556991366FaAEBDFjLhuW7dOk2fPl0ff/yxVq1apZMnT+ryyy9XaWlpjWM++ugjjR8/XlOmTNHWrVs1ZswYjRkzRjt27KjHygEADY3DGGMCXURdHDlyRDExMVq3bp1SU1Or7TN27FiVlpZqxYoV3raLLrpIycnJWrBgQa0+x+PxyOVyKU2j1cQR4ZPaAQSH8OjoQJcAPys3J5Rz9G9yu92Kiory2X5D5sjzl9xutySpVatWNfbJzc1Venp6pbaMjAzl5ubWOKasrEwej6fSAgDAz4VkeFZUVGjmzJkaPHiwevToUWO/wsJCxcbGVmqLjY1VYWFhjWOys7Plcrm8S2Jios/qBgA0DCEZntOnT9eOHTu0bNkyn+87KytLbrfbu+zfv9/nnwEACG1NAl2ArRkzZmjFihVav3692rVrd9q+cXFxOnToUKW2Q4cOKS4ursYxTqdTTqfTJ7UCABqmkDnyNMZoxowZevPNN7VmzRp16NDhV8ekpKQoJyenUtuqVauUkpLirzIBAI1AyBx5Tp8+XUuXLtVbb72lFi1aeH+3dLlcatasmSRp4sSJatu2rbKzsyVJt99+u4YMGaJ58+Zp5MiRWrZsmTZv3qyFCxcGbB4AgNAXMkeeTz/9tNxut9LS0hQfH+9dXn75ZW+fgoICHTx40Ls+aNAgLV26VAsXLlRSUpJee+01LV++/LQXGQEA8GtC9j7P+sJ9nkDDxX2eDR/3eQIAECQITwAALBGeAABYIjwBALBEeAIAYInwBADAEuEJAIAlwhMAAEuEJwAAlghPAAAsEZ4AAFgiPAEAsER4AgBgifAEAMAS4QkAgCXCEwAAS4QnAACWCE8AACwRngAAWCI8AQCwRHgCAGCJ8AQAwBLhCQCAJcITAABLhCcAAJYITwAALBGeAABYIjwBALBEeAIAYInwBADAEuEJAIAlwhMAAEuEJwAAlghPAAAsEZ4AAFgiPAEAsER4AgBgifAEAMAS4QkAgCXCEwAAS4QnAACWCE8AACwRngAAWCI8AQCwRHgCAGCJ8AQAwBLhCQCAJcITAABLhCcAAJYITwAALBGeAABYCpnwzM7OVv/+/dWiRQvFxMRozJgx2r1792nHLF68WA6Ho9ISGRlZTxUDABqqkAnPdevWafr06fr444+1atUqnTx5UpdffrlKS0tPOy4qKkoHDx70Lvv27aunigEADVWTQBdQWytXrqy0vnjxYsXExCgvL0+pqak1jnM4HIqLi/N3eQCARiRkwvOX3G63JKlVq1an7VdSUqLzzjtPFRUV6tOnj/74xz/qwgsvrLF/WVmZysrKqnxOuU5KxgeFAwgaxpwIdAnws/L//zc2xrf/AncYX++xHlRUVOjKK69UcXGxPvzwwxr75ebm6osvvlCvXr3kdrs1d+5crV+/Xjt37lS7du2qHfPAAw9o9uzZ/iodABAAe/fuVceOHX22v5AMz1tuuUXvvfeePvzwwxpDsDonT55Ut27dNH78eD344IPV9vnlkWdxcbHOO+88FRQUyOVynXHtocDj8SgxMVH79+9XVFRUoMupN8y78cy7Mc5ZapzzdrvdOvfcc3X06FG1bNnSZ/sNudO2M2bM0IoVK7R+/Xqr4JSkiIgI9e7dW3v27Kmxj9PplNPprNLucrkazf/ZfhIVFdXo5iwx78akMc5ZapzzDgvz7fWxIXO1rTFGM2bM0Jtvvqk1a9aoQ4cO1vs4deqUtm/frvj4eD9UCABoLELmyHP69OlaunSp3nrrLbVo0UKFhYWS/nVE2KxZM0nSxIkT1bZtW2VnZ0uS5syZo4suukidO3dWcXGxHnnkEe3bt0833nhjwOYBAAh9IROeTz/9tCQpLS2tUvuiRYt0/fXXS5IKCgoqHZofPXpUU6dOVWFhoaKjo9W3b1999NFH6t69e60/1+l0atasWdWeym2oGuOcJebdmObdGOcsNc55+2vOIXnBEAAAgRQyv3kCABAsCE8AACwRngAAWCI8AQCwRHj+QlFRkSZMmKCoqCi1bNlSU6ZMUUlJyWnHpKWlVXn12bRp0+qp4rqZP3++2rdvr8jISA0cOFCbNm06bf9XX31VXbt2VWRkpHr27Kl33323nir1LZt5N4RX2q1fv16jRo1SQkKCHA6Hli9f/qtj1q5dqz59+sjpdKpz585avHix3+v0Ndt5r127tsrf2uFweG+JCwV1eW2jFNrf7UC+qpLw/IUJEyZo586dWrVqlfdJRjfddNOvjps6dWqlV5/9+c9/rodq6+bll19WZmamZs2apS1btigpKUkZGRk6fPhwtf0/+ugjjR8/XlOmTNHWrVs1ZswYjRkzRjt27Kjnys+M7byl0H+lXWlpqZKSkjR//vxa9f/qq680cuRIXXLJJcrPz9fMmTN144036v333/dzpb5lO++f7N69u9LfOyYmxk8V+l5dXtsY6t/tgL6q0sDrs88+M5LMJ5984m177733jMPhMAcOHKhx3JAhQ8ztt99eDxX6xoABA8z06dO966dOnTIJCQkmOzu72v6/+c1vzMiRIyu1DRw40Nx8881+rdPXbOe9aNEi43K56qk6/5Nk3nzzzdP2ufvuu82FF15YqW3s2LEmIyPDj5X5V23m/cEHHxhJ5ujRo/VSU304fPiwkWTWrVtXY5+G8t3+SW3m7KvvNUeeP5Obm6uWLVuqX79+3rb09HSFhYVp48aNpx27ZMkStW7dWj169FBWVpaOHz/u73Lr5MSJE8rLy1N6erq3LSwsTOnp6crNza12TG5ubqX+kpSRkVFj/2BUl3lL/36lXWJiokaPHq2dO3fWR7kB0xD+1mciOTlZ8fHxuuyyy7Rhw4ZAl3NGavPaxob297Z9VeWZfK8Jz58pLCyscpqmSZMmatWq1Wl/+/jtb3+rl156SR988IGysrL04osv6tprr/V3uXXy3Xff6dSpU4qNja3UHhsbW+McCwsLrfoHo7rMu0uXLnr++ef11ltv6aWXXlJFRYUGDRqkb775pj5KDoia/tYej0c//PBDgKryv/j4eC1YsECvv/66Xn/9dSUmJiotLU1btmwJdGl1UlFRoZkzZ2rw4MHq0aNHjf0awnf7J7Wds6++1yHzeL4zce+99+rhhx8+bZ9du3bVef8//020Z8+eio+P19ChQ7V371516tSpzvtFYKWkpCglJcW7PmjQIHXr1k3PPPNMja+0Q2jq0qWLunTp4l0fNGiQ9u7dq8cee0wvvvhiACurm+nTp2vHjh2nfd9xQ1PbOfvqe90owvPOO+/0Pv+2Jh07dlRcXFyVi0fKy8tVVFSkuLi4Wn/ewIEDJUl79uwJuvBs3bq1wsPDdejQoUrthw4dqnGOcXFxVv2DUV3m/Uu1eaVdqKvpbx0VFeV9AUNjMWDAgJAMH5vXNjaE77bk/1dVVqdRnLZt06aNunbtetqladOmSklJUXFxsfLy8rxj16xZo4qKCm8g1kZ+fr4kBeWrz5o2baq+ffsqJyfH21ZRUaGcnJxK/zX2cykpKZX6S9KqVatq7B+M6jLvX2oMr7RrCH9rX8nPzw+pv7Wpw2sbQ/3vXZc5/1Kdv9dnfMlRAzNs2DDTu3dvs3HjRvPhhx+a888/34wfP967/ZtvvjFdunQxGzduNMYYs2fPHjNnzhyzefNm89VXX5m33nrLdOzY0aSmpgZqCr9q2bJlxul0msWLF5vPPvvM3HTTTaZly5amsLDQGGPMddddZ+69915v/w0bNpgmTZqYuXPnml27dplZs2aZiIgIs3379kBNoU5s5z179mzz/vvvm71795q8vDwzbtw4ExkZaXbu3BmoKVg7duyY2bp1q9m6dauRZB599FGzdetWs2/fPmOMMffee6+57rrrvP2//PJL07x5c3PXXXeZXbt2mfnz55vw8HCzcuXKQE2hTmzn/dhjj5nly5ebL774wmzfvt3cfvvtJiwszKxevTpQU7B2yy23GJfLZdauXWsOHjzoXY4fP+7t09C+23WZs6++14TnL3z//fdm/Pjx5uyzzzZRUVFm8uTJ5tixY97tX331lZFkPvjgA2OMMQUFBSY1NdW0atXKOJ1O07lzZ3PXXXcZt9sdoBnUzpNPPmnOPfdc07RpUzNgwADz8ccfe7cNGTLETJo0qVL/V155xVxwwQWmadOm5sILLzTvvPNOPVfsGzbznjlzprdvbGysGTFihNmyZUsAqq67n27B+OXy0zwnTZpkhgwZUmVMcnKyadq0qenYsaNZtGhRvdd9pmzn/fDDD5tOnTqZyMhI06pVK5OWlmbWrFkTmOLrqLr5Sqr092to3+26zNlX32teSQYAgKVG8ZsnAAC+RHgCAGCJ8AQAwBLhCQCAJcITAABLhCcAAJYITwAALBGeQBBYu3atHA6HiouLJf3rbfctW7YMWD2++Pyvv/5aDofD+7hKoCEhPIF6kpubq/DwcI0cOfJX+44dO1b//Oc/66Eq/0lMTNTBgwdP+3ooIFQRnkA9ee6553Trrbdq/fr1+vbbb0/bt1mzZlXeLRtqwsPDFRcXpyZNGsXLm9DIEJ5APSgpKdHLL7+sW265RSNHjtTixYtP27+606Zvv/22+vfvr8jISLVu3VpXXXWVd1tZWZl+//vfq23btjrrrLM0cOBArV279rSfUVxcrJtvvlmxsbGKjIxUjx49tGLFikp93n//fXXr1k1nn322hg0bpoMHD3q3VVRUaM6cOWrXrp2cTqeSk5O1cuVK7/bqTtvu3LlTV1xxhaKiotSiRQtdfPHF2rt3r3f7s88+q27duikyMlJdu3bVX/7yl9POAQgUwhOoB6+88oq6du2qLl266Nprr9Xzzz8vm8dKv/POO7rqqqs0YsQIbd26VTk5ORowYIB3+4wZM5Sbm6tly5bp008/1X/+539q2LBh+uKLL6rdX0VFhYYPH64NGzbopZde0meffaY//elPCg8P9/Y5fvy45s6dqxdffFHr169XQUGBfv/733u3P/HEE5o3b57mzp2rTz/9VBkZGbryyitr/MwDBw4oNTVVTqdTa9asUV5enm644QaVl5dLkpYsWaL7779fDz30kHbt2qU//vGPuu+++/S3v/2t1v87AfXmTJ9qD+DXDRo0yDz++OPGGGNOnjxpWrdu7X0zjzH/fgvI0aNHjTHGLFq0yLhcLu/2lJQUM2HChGr3vW/fPhMeHm4OHDhQqX3o0KEmKyur2jHvv/++CQsLM7t37652+6JFi4wks2fPHm/b/PnzTWxsrHc9ISHBPPTQQ5XG9e/f3/zud78zxvz7DURbt241xhiTlZVlOnToYE6cOFHtZ3bq1MksXbq0UtuDDz5oUlJSqu0PBBI/RgB+tnv3bm3atElvvvmmJKlJkyYaO3asnnvuOaWlpdVqH/n5+Zo6dWq127Zv365Tp07pggsuqNReVlamc845p8b9tWvXrsqYn2vevLk6derkXY+Pj9fhw4clSR6PR99++60GDx5caczgwYO1bdu2Gj/z4osvVkRERJVtpaWl2rt3r6ZMmVJpnuXl5XK5XDXWCAQK4Qn42XPPPafy8nIlJCR424wxcjqdeuqpp2oVDs2aNatxW0lJicLDw5WXl1fptKsknX322db7+8kvQ87hcFidarb5zJKSEknSX//6Vw0cOLDStl/OCQgG/OYJ+FF5ebleeOEFzZs3T/n5+d5l27ZtSkhI0P/+7//Waj+9evVSTk5Otdt69+6tU6dO6fDhw+rcuXOlJS4ursb9ffPNN3W+HSYqKkoJCQnasGFDpfYNGzaoe/fuNX7mP/7xD508ebLKttjYWCUkJOjLL7+sMocOHTrUqUbAnzjyBPxoxYoVOnr0qKZMmVLlCPOaa67Rc889p2nTpv3qfmbNmqWhQ4eqU6dOGjdunMrLy/Xuu+/qnnvu0QUXXKAJEyZo4sSJmjdvnnr37q0jR44oJydHvXr1qva+0iFDhig1NVXXXHONHn30UXXu3Fmff/65HA6Hhg0bVqu53XXXXZo1a5Y6deqk5ORkLVq0SPn5+VqyZEm1/WfMmKEnn3xS48aNU1ZWllwulz7++GMNGDBAXbp00ezZs3XbbbfJ5XJp2LBhKisr0+bNm3X06FFlZmbWqiag3gT6R1egIbviiivMiBEjqt22ceNGI8ls27btVy8YMsaY119/3SQnJ5umTZua1q1bm6uvvtq77cSJE+b+++837du3NxERESY+Pt5cddVV5tNPP62xtu+//95MnjzZnHPOOSYyMtL06NHDrFixosbPf/PNN83P/5Vx6tQp88ADD5i2bduaiIgIk5SUZN577z3v9l9eMGSMMdu2bTOXX365ad68uWnRooW5+OKLzd69e73blyxZ4p1jdHS0SU1NNW+88UaNcwACxWHMGfyIAQBAI8RvngAAWCI8AQCwRHgCAGCJ8AQAwBLhCQCAJcITAABLhCcAAJYITwAALBGeAABYIjwBALBEeAIAYInwBADA0v8Dpv1WLvYQJ3gAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "@memo\n",
    "def all_outcomes[a: cards, b: cards]():\n",
    "    cast: [alice, bob]\n",
    "    alice: chooses(c in cards, wpp=alice_chooses_card[c](3.0))\n",
    "    bob: chooses(c in cards, wpp=bob_chooses_card[c]())\n",
    "    return E[alice.c == a and bob.c == b]\n",
    "\n",
    "plt.imshow(all_outcomes())\n",
    "plt.xlabel('Alice choice')\n",
    "plt.ylabel('Bob choice')\n",
    "None"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "eb2e6004-68da-49aa-8460-a5536add2ab2",
   "metadata": {},
   "source": [
    "## Scalar implicature"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6d9d46e5-3253-42f8-9e3d-c46cfbc4b8a7",
   "metadata": {},
   "source": [
    "Now that you have some experience with memo, let us try a more sophisticated model: a simple Bayesian model of scalar implicature. Suppose your friend points to a group of three people and says \"some of those people are nice.\" Even though that statement is logically consistent with all 3 people being nice, you intuitively interpret it as 1 or 2 people being nice, because if _all_ of the people were nice, your friend would have said \"all\" rather than \"some.\"\n",
    "\n",
    "To model this kind of inference in memo, we start by creating sets representing $N$, the number of nice people, and $U$, the possible utterances your friend could have made (\"none,\" \"some,\" or \"all\" of the people are nice)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "7b5f868b-0910-4d91-ae4f-92fa4b96e9e5",
   "metadata": {},
   "outputs": [],
   "source": [
    "N = [0, 1, 2, 3]  # number of nice people\n",
    "U = [0, 1, 2]     # utterance: {none, some, all} of the people are nice"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fbace57c-fb99-4339-9474-e7c8aa25c601",
   "metadata": {},
   "source": [
    "Next, we write a function that returns `True` if an utterance `u` is logically consistent with a number `n`, and `False` otherwise. We decorate this function with `@jax.jit`, which makes it a fast JAX-compiled function.\n",
    "\n",
    "(For efficiency reasons, memo can only make calls to JAX functions. But JAX can be used to write nearly any program you can imagine, including physics simulators, graphics engines, neural networks, and more.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "259e6c5e-5ada-41c2-9da8-84f2268c0370",
   "metadata": {},
   "outputs": [],
   "source": [
    "@jax.jit\n",
    "def meaning(n, u):  # (none)  (some)  (all)\n",
    "    return np.array([ n == 0, n > 0, n == 3 ])[u]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9e004b2b-8946-4f3e-84b9-91452134ba88",
   "metadata": {},
   "source": [
    "Finally, we write a memo that involves a `speaker` and a `listener`. Notice the two axes: we will ultimately produce a table that gives the listener's posterior belief for each number `n` if they heard utterance `u`. Hence, we expect the output to be a $3 \\times 4$ table."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "aa5529e7-2082-4612-a32d-846ba356c982",
   "metadata": {},
   "outputs": [],
   "source": [
    "@memo\n",
    "def scalar[n: N, u: U](beta):\n",
    "    cast: [speaker, listener]\n",
    "    listener: thinks[\n",
    "        speaker: given(n in N, wpp=1),\n",
    "        speaker: chooses(u in U, wpp=imagine[\n",
    "            listener: knows(u),\n",
    "            listener: chooses(n in N, wpp=meaning(n, u)),\n",
    "            exp(beta * E[listener.n == n])\n",
    "        ])\n",
    "    ]\n",
    "    listener: observes [speaker.u] is u\n",
    "    listener: chooses(n in N, wpp=E[speaker.n == n])\n",
    "    return E[listener.n == n]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3df6c829-99f8-4d3c-83b8-beafd6dca065",
   "metadata": {},
   "source": [
    "Notice the two nested layers of recursion. The \"outer\" listener thinks the speaker is communicating strategically by internally imagining a naive \"inner\" listener who infers logically consistent meanings (i.e. `wpp=meaning(n, u)`). Some things to notice here:\n",
    "1. `given` is an alias of `choose`, useful in cases where you don't want to imply agency. Here, the listener has a uniform prior over the speaker's intended `n`. \n",
    "2. `wpp=imagine[ ... ]` allows the listener to simulate a hypothetical scenario where the speaker chose utterance `u` for a naive listener. The first two lines of the `imagine` simulate what happens next, and the last line is a quantity to compute in the imagined world.\n",
    "3. `knows` is used to tell the imagined agent about some value. Here, the speaker uses `knows` to tell the imagined listener about the chosen utterance.\n",
    "4. `observes` is used to condition on an observation of another agent's choice. Here, the listener observes that the speaker's chosen `u` is `u`.\n",
    "\n",
    "Running this model with $\\beta=1$ gives us the following $3\\times 4$ table:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "ae1f8f91-efbb-46c7-a24b-ea0b5586bed3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Array([[0.4234105 , 0.2164377 , 0.2164377 , 0.14371407],\n",
       "       [0.16217656, 0.31449857, 0.31449857, 0.20882624],\n",
       "       [0.15905735, 0.22101384, 0.22101384, 0.39891493]], dtype=float32)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scalar(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d71cea70-2e6b-4c47-ab5b-2edab3d41485",
   "metadata": {},
   "source": [
    "To get a better sense for this, we can plot it with matplotlib. Do our general expected patterns seem to hold?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "59d82d31-a853-47c7-bdc3-dbdecb9c466e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x1288500b0>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "plt.plot(scalar(1).T, label=['none', 'some', 'all'])\n",
    "plt.xlabel('Number of nice people')\n",
    "plt.ylabel('Posterior probability')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "49531916-d1b5-45d7-a305-db50f0b127ae",
   "metadata": {},
   "source": [
    "## Fitting parameters\n",
    "\n",
    "Suppose we collected some data on people's intuitions about scalar implicature:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "b799a3c5-8b43-4c28-87d3-493998210bcd",
   "metadata": {},
   "outputs": [],
   "source": [
    "# (this is fake data for the sake of a tutorial)\n",
    "data = np.array([\n",
    "    [0.95, 0.05, 0., 0.],\n",
    "    [0., 0.4, 0.6, 0.],\n",
    "    [0., 0., 0.05, 0.95]\n",
    "])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "798a652b-20cb-4949-b719-3be8dc8c7698",
   "metadata": {},
   "source": [
    "We can compare our model's fit to the data by plotting a scatterplot:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "3fefc244-2000-476d-b9a1-9c722b0db72f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Humans')"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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u3dvU1NT02b/8vJys2jRIvPb3/7WpKamml/+8pet+uTn55tvfvObpqqqyvc6fvx4B29J5AQ6hnfeeadZt26d2bVrl9m3b5+ZPXu2cblc5u9//7uvz6pVq4zL5TKvvPKK+ctf/mK+//3vm4EDB5ovvviiszarU3XEGM6aNctMnjzZbz88efJkZ21Spwp0/N555x2zbds2s3fvXnPw4EFTWFhoYmJiTElJia8P+2DoY9id9kFjAh/DMyorK03//v3NxIkTzZQpU/ymdbf98AzCTYgyMjLMggULfO9bWlpMv379TEFBwXnnHTBgQLvhZtSoUWGsMrqFMobGGPPll1+ahIQE8/zzzxtjjPF6vSY1NdU88cQTvj6fffaZiYuLM7/97W/DW3yUCPcYGvPVF8vX/6G0VajjZ4wxY8aMMcuWLTPGsA8aE/oYGtO99kFjghvDL7/80lx33XXmV7/6Vavx6o774RmclgpBc3Ozdu7cqezsbF+b0+lUdna2ysrKQlr2gQMH1K9fP11xxRW66667dPTo0VDLjUrhGMNTp07p9OnT6tu3rySpsrJS1dXVfst0uVzKzMwM+XOJRh0xhmds375dycnJGjp0qObPn69//vOfYa09GoQ6fsYYlZaWav/+/frWt74liX1QCn0Mz+gO+6AU/Bj+4he/UHJysu65555W07rbfni2bvfDmeF04sQJtbS0KCUlxa89JSVFH330UdDLzczM1MaNGzV06FBVVVVpxYoVmjhxovbs2aOEhIRQy44q4RjDxYsXq1+/fr6/wNXV1b5lfH2ZZ6bZpCPGUJImT56sqVOnauDAgTp06JB+/vOf65ZbblFZWZliYmLCug2RFOz4eTwe9e/fX01NTYqJidEzzzyjm266SRL74BmhjKHUffZBKbgx3LFjh5599lnt3r27zendbT88G+EmCt1yyy2+P48cOVKZmZkaMGCAfve737WZzruzVatWafPmzdq+fbvi4+MjXU6X1N4Y/uhHP/L9+eqrr9bIkSM1aNAgbd++Xd/5znciUWpUSUhI0O7du/X555+rtLRUubm5uuKKK3TjjTdGurQu43xjyD7Yvvr6es2YMUPFxcVKSkqKdDlRh3ATgqSkJMXExKimpsavvaamRqmpqWFbT+/evXXllVfq4MGDYVtmtAhlDJ988kmtWrVKb731lkaOHOlrPzNfTU2N0tLS/JY5evTo8BUfJTpiDNtyxRVXKCkpSQcPHrTqiyXY8XM6nRo8eLAkafTo0dq3b58KCgp04403sg/+f6GMYVts3QelwMfw0KFDOnz4sHJycnxtXq9XktSjRw/t37+/2+2HZ+OamxDExsZq3LhxKi0t9bV5vV6VlpYqKysrbOv5/PPPdejQIb+d0xbBjuHjjz+uRx99VCUlJRo/frzftIEDByo1NdVvmXV1dfq///u/sH4u0aIjxrAtf//73/XPf/7Tuv0wXH+PvV6vmpqaJLEPSqGPYVts3QelwMdw2LBh+utf/6rdu3f7Xt///vf17W9/W7t375bb7e52+6GfSF/R3NVt3rzZxMXFmY0bN5q9e/eaH//4x6Z3796murraGGPMjBkzzJIlS3z9m5qazK5du8yuXbtMWlqaWbRokdm1a5c5cOCAr8/PfvYzs337dlNZWWneffddk52dbZKSkkxtbW2nb19nCHQMV61aZWJjY83WrVv9bhGtr6/369O7d2/z+9//3nz44YdmypQpVt/+GO4xrK+vN4sWLTJlZWWmsrLSvPXWW2bs2LFmyJAhprGxMSLb2JECHb+VK1eaN9980xw6dMjs3bvXPPnkk6ZHjx6muLjY14d9MLQx7G77oDGBj+HXtXV3WXfbD88g3ITB008/bS6//HITGxtrMjIyzPvvv++bdsMNN5hZs2b53ldWVhpJrV433HCDr8+0adNMWlqaiY2NNf379zfTpk0zBw8e7MQt6nyBjOGAAQPaHMP8/HxfH6/Xa5YvX25SUlJMXFyc+c53vmP279/fiVvU+cI5hqdOnTI333yzufTSS03Pnj3NgAEDzNy5c33/yNookPF7+OGHzeDBg018fLzp06ePycrKMps3b/ZbHvtgaGPYHfdBYwIbw69rK9x0x/3QGGMcxhgTgQNGAAAAHYJrbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAFhv+/btcjgc+uyzzy54nvT0dBUWFnZYTQA6DuEGQMTNnj1bDodD8+bNazVtwYIFcjgcmj17ducXBqBLItwAiAput1ubN2/WF1984WtrbGzUpk2bdPnll0ewMgBdDeEGQFQYO3as3G63tm3b5mvbtm2bLr/8co0ZM8bX1tTUpAceeEDJycmKj4/X9ddfrw8++MBvWa+//rquvPJK9erVS9/+9rd1+PDhVuvbsWOHJk6cqF69esntduuBBx5QQ0NDh20fgM5DuAEQNe6++24999xzvvcbNmzQnDlz/Pr8+7//u15++WU9//zzqqio0ODBgzVp0iSdPHlSknTs2DFNnTpVOTk52r17t+69914tWbLEbxmHDh3S5MmTdfvtt+vDDz/Uli1btGPHDt13330dv5EAOhzhBkDUmD59unbs2KEjR47oyJEjevfddzV9+nTf9IaGBq1fv15PPPGEbrnlFg0fPlzFxcXq1auXnn32WUnS+vXrNWjQIK1evVpDhw7VXXfd1ep6nYKCAt1111168MEHNWTIEF133XV66qmn9MILL6ixsbEzNxlAB+gR6QIA4IxLL71U3/ve97Rx40YZY/S9731PSUlJvumHDh3S6dOnNWHCBF9bz549lZGRoX379kmS9u3bp8zMTL/lZmVl+b3/y1/+og8//FC/+c1vfG3GGHm9XlVWVuqqq67qiM0D0EkINwCiyt133+07PbRu3boOWcfnn3+un/zkJ3rggQdaTePiZaDrI9wAiCqTJ09Wc3OzHA6HJk2a5Ddt0KBBio2N1bvvvqsBAwZIkk6fPq0PPvhADz74oCTpqquu0h/+8Ae/+d5//32/92PHjtXevXs1ePDgjtsQABHDNTcAokpMTIz27dunvXv3KiYmxm/axRdfrPnz5+uhhx5SSUmJ9u7dq7lz5+rUqVO65557JEnz5s3TgQMH9NBDD2n//v3atGmTNm7c6LecxYsX67333tN9992n3bt368CBA/r973/PBcWAJQg3AKJOYmKiEhMT25y2atUq3X777ZoxY4bGjh2rgwcP6o033lCfPn0kfXVa6eWXX9Yrr7yiUaNGqaioSCtXrvRbxsiRI/WnP/1JH3/8sSZOnKgxY8YoLy9P/fr16/BtA9DxHMYYE+kiAAAAwoUjNwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwyv8D3STIF8tiZA4AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(scalar(1).reshape(-1), data.reshape(-1))\n",
    "plt.xlabel('Model')\n",
    "plt.ylabel('Humans')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "05b61102-d43c-4d2f-b7de-7fed283934f7",
   "metadata": {},
   "source": [
    "We can probably get a better fit by tuning the $\\beta$ parameter. Fortunately, because memo is based on JAX, we have many powerful optimization tools at our disposal. Let's start by writing down a loss function to optimize: say, mean squared error."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "e773962a-9929-4f23-9628-c1a1b9e884e0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Array(0.07819292, dtype=float32)"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@jax.jit\n",
    "def mse(beta):\n",
    "    return np.mean((data - scalar(beta)) ** 2)\n",
    "mse(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "20279d66-4e10-4cf4-a09c-aa4d14c35144",
   "metadata": {},
   "source": [
    "Looks like our MSE is currently quite high, but perhaps we can do better. We will optimize the MSE two ways: by grid search and by gradient descent."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "eff2e664-0eb4-483e-bc09-a8f03eda1dc2",
   "metadata": {},
   "source": [
    "### Grid search\n",
    "\n",
    "JAX makes it easy and fast to perform a parallelized grid search over possible $\\beta$ values. Here is a near-instantaneous grid search over 1000 options. Notice the use of JAX's `vmap` to parallelize the grid search."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "beda47e4-aa5c-47c6-8666-9b76a62da4cd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 99.3 ms, sys: 5.96 ms, total: 105 ms\n",
      "Wall time: 100 ms\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'beta')"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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32vHjh2aO3euiWnNsXnzZg0ZMkSVlZUKCwvTvHnzlJqaqqysLNM/UxQheKwxY8Y0Pu7Tp4/S09OVkpKiOXPm6M477zQxGXzJTTfd1Pi4d+/e6tOnjy655BItXrxYI0aMMDGZuTIyMrRlyxbOy2uCc+2ru+++u/Fx79691a5dO40YMUJ79uzRJZdc0tIxTdWtWzdlZWWppKREH374oW677TYtWbLE7FiSOFm6xcXExMhms51xRvzhw4cVHx9vUirvEBUVpa5du2r37t1mR/FoDZ8jPmMXplOnToqJifHrz9nkyZP1n//8R998840SExMbt8fHx6u6ulrFxcWnvN6fP1vn2ldnk56eLkl++dmy2+3q3Lmz+vfvr+nTpystLU0vv/yyR3ymKEItzG63q3///lq0aFHjNqfTqUWLFmnIkCEmJvN85eXl2rNnj9q1a2d2FI/WsWNHxcfHn/IZKy0t1apVq/iMNcGBAwd09OhRv/ycGYahyZMna968efrvf/+rjh07nvJ8//79FRgYeMpna8eOHcrJyfG7z9aP7auzycrKkiS//Gydzul0qqqqyiM+UxwaM8GUKVN02223acCAARo0aJBmzJihiooKTZo0yexoHuXRRx/V2LFjlZKSory8PE2bNk02m00333yz2dFMV15efsp/VWZnZysrK0vR0dFKTk7Www8/rOeee05dunRRx44dNXXqVCUkJGjcuHHmhTbJ+fZVdHS0nnnmGd1www2Kj4/Xnj179Nhjj6lz584aNWqUianNkZGRoXfffVcLFixQeHh44zkakZGRCgkJUWRkpO68805NmTJF0dHRioiI0AMPPKAhQ4Zo8ODBJqdvWT+2r/bs2aN3331X1113ndq0aaNNmzbpkUce0ZVXXqk+ffqYnL5lPfHEExozZoySk5NVVlamd999V4sXL9YXX3zhGZ+pFrk2DWd49dVXjeTkZMNutxuDBg0yVq5caXYkjzNhwgSjXbt2ht1uN9q3b29MmDDB2L17t9mxPMI333xjSDrjdttttxmGUXcJ/dSpU424uDgjKCjIGDFihLFjxw5zQ5vkfPvq+PHjxrXXXmu0bdvWCAwMNFJSUoy77rrLOHTokNmxTXG2/STJePPNNxtfc+LECeP+++83WrdubbRq1coYP368kZ+fb15ok/zYvsrJyTGuvPJKIzo62ggKCjI6d+5s/O53vzNKSkrMDW6CO+64w0hJSTHsdrvRtm1bY8SIEcaXX37Z+LzZnymLYRhGy1QuAAAAz8I5QgAAwG9RhAAAgN+iCAEAAL9FEQIAAH6LIgQAAPwWRQgAAPgtihAAAPBbFCEAAOC3KEIAvN6wYcP08MMPmx0DgBeiCAHwezNnzlRUVJTZMQCYgCIEAAD8FkUIgE+ora3V5MmTFRkZqZiYGE2dOlUNSylWVVXp0UcfVfv27RUaGqr09HQtXrxYkrR48WJNmjRJJSUlslgsslgsevrppyVJ77zzjgYMGKDw8HDFx8frlltuUUFBgUn/QgDNgSIEwCe89dZbCggI0OrVq/Xyyy/rL3/5i/75z39KkiZPnqwVK1bovffe06ZNm3TjjTdq9OjR2rVrl4YOHaoZM2YoIiJC+fn5ys/P16OPPipJqqmp0Z/+9Cdt3LhR8+fP1759+3T77beb+K8E4G6sPg/A6w0bNkwFBQXaunWrLBaLJOnxxx/Xxx9/rIULF6pTp07KyclRQkJC4++MHDlSgwYN0vPPP6+ZM2fq4YcfVnFx8Xn/ztq1azVw4ECVlZUpLCysOf9JAFoII0IAfMLgwYMbS5AkDRkyRLt27dLmzZvlcDjUtWtXhYWFNd6WLFmiPXv2nPc9161bp7Fjxyo5OVnh4eG66qqrJEk5OTnN+m8B0HICzA4AAM2pvLxcNptN69atk81mO+W5843qVFRUaNSoURo1apRmzZqltm3bKicnR6NGjVJ1dXVzxwbQQihCAHzCqlWrTvl55cqV6tKli/r16yeHw6GCggJdccUVZ/1du90uh8Nxyrbvv/9eR48e1QsvvKCkpCRJdYfGAPgWDo0B8Ak5OTmaMmWKduzYodmzZ+vVV1/VQw89pK5du+pXv/qVJk6cqLlz5yo7O1urV6/W9OnT9emnn0qSOnTooPLyci1atEiFhYU6fvy4kpOTZbfb9eqrr2rv3r36+OOP9ac//cnkfyUAd6MIAfAJEydO1IkTJzRo0CBlZGTooYce0t133y1JevPNNzVx4kT99re/Vbdu3TRu3DitWbNGycnJkqShQ4fq3nvv1YQJE9S2bVu9+OKLatu2rWbOnKkPPvhAqampeuGFF/TnP//ZzH8igGbAVWMAAMBvMSIEAAD8FkUIAAD4LYoQAADwWxQhAADgtyhCAADAb1GEAACA36IIAQAAv0URAgAAfosiBAAA/BZFCAAA+C2KEAAA8Fv/H9uZxcDEaErfAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%%time\n",
    "beta_grid = np.linspace(0, 30, 1000)\n",
    "plt.plot(beta_grid, jax.vmap(mse)(beta_grid))\n",
    "plt.yscale('log')\n",
    "plt.ylabel('Mean squared error')\n",
    "plt.xlabel('beta')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5e740e85-0cc2-4ae0-a590-9e51513119b7",
   "metadata": {},
   "source": [
    "It looks like the minimum is near 10. Let's try to get a more precise answer by gradient descent, starting from $\\beta=10$. The key trick here is to use `jax.value_and_grad`, which returns a tuple of a functions value and its derivative with respect to its inputs. That derivative can then be used for gradient descent."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "d7b90ea6-0ca7-41f3-be4c-17a70fad0448",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Final beta value: 10.7509985\n",
      "Final MSE: 0.0018750217\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 800x300 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "grad = jax.value_and_grad(mse)\n",
    "\n",
    "beta = 10.\n",
    "betas = []\n",
    "mses = []\n",
    "for t in range(1_000 + 1):\n",
    "    mse_value, mse_grad = grad(beta)\n",
    "    beta = beta - 50. * mse_grad\n",
    "    if t % 10 == 0:\n",
    "        betas.append(beta)\n",
    "        mses.append(mse_value)\n",
    "\n",
    "plt.figure(figsize=(8, 3))\n",
    "\n",
    "plt.subplot(1, 2, 1)\n",
    "plt.plot(mses)\n",
    "plt.xlabel('Step')\n",
    "plt.ylabel('MSE')\n",
    "plt.yscale('log')\n",
    "\n",
    "plt.subplot(1, 2, 2)\n",
    "plt.plot(betas)\n",
    "plt.xlabel('Step')\n",
    "plt.ylabel('beta')\n",
    "\n",
    "plt.tight_layout()\n",
    "\n",
    "print(\"Final beta value:\", beta)\n",
    "print(\"Final MSE:\", mse_value)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9704611f-9d31-4cea-97a5-fa6bf464b45d",
   "metadata": {},
   "source": [
    "That's a much lower MSE than what we started with! To finish up, let us make a scatterplot with our optimized model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "5e845a54-4776-490c-bc74-1a2fe324a445",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Humans')"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(scalar(beta).reshape(-1), data.reshape(-1))\n",
    "plt.xlabel('Model')\n",
    "plt.ylabel('Humans')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2f397968",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
